Android保存音频文件

本文介绍了一个用于Android平台的音频文件处理方法,包括如何通过Intent选择音频文件、处理返回的URI并将其保存到缓存目录中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搜了一晚上资料,累死我了,全是录音
直接上代码

先调用选择文件管理器选择音频,PICK_FILE是返回值

   void xuanzeyinpin(){
         //选择音频
         Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
         intent.addCategory(Intent.CATEGORY_OPENABLE);
         intent.setType("audio/*");
         startActivityForResult(intent, PICK_FILE);
         
     }

然后在返回结果里面处理

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == PICK_FILE){
            if (resultCode == Activity.RESULT_OK && data != null) {
                Uri uri = data.getData();
                if (uri != null){
                  


                    try {
                        //读取由FileProvider传递的uri文件
                        /*音频文件可以正常读取
                        Toast.makeText(this,String.valueOf(uriToFileApiQ(uri,this).length())
                                       , Toast.LENGTH_LONG).show();
                                       */
                        uriToFileApiQ(uri,this,"chongdian.mp3");         
                        
                           
                        Toast.makeText(this,"选择成功",Toast.LENGTH_SHORT).show();
                    } catch (Exception e) {
                        Toast.makeText(this,"选择错误"+e,Toast.LENGTH_LONG).show();
                    }
                    
                    }
                    }
                }
                }

将文件存到缓存目录

              
    @RequiresApi(api = Build.VERSION_CODES.Q)
    public static File uriToFileApiQ(Uri uri, Context context,String strFileName) {
        File file = null;
        if(uri == null) return file;
        //android10以上转换
        if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)) {
            file = new File(uri.getPath());
        } else if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
            //把文件复制到沙盒目录
            ContentResolver contentResolver = context.getContentResolver();
           /*
            String displayName = System.currentTimeMillis()+ Math.round((Math.random() + 1) * 1000)
                +"."+ MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri));
                */
//            注释掉的方法可以获取到原文件的文件名,但是比较耗时
//            Cursor cursor = contentResolver.query(uri, null, null, null, null);
//            if (cursor.moveToFirst()) {
//                String displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));}

            try {
                InputStream is = contentResolver.openInputStream(uri);
                File cache = new File(context.getExternalCacheDir(), strFileName);
                FileOutputStream fos = new FileOutputStream(cache);
                FileUtils.copy(is, fos);
                file = cache;
                fos.close();
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return file;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值