搜了一晚上资料,累死我了,全是录音
直接上代码
先调用选择文件管理器选择音频,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;
}