[英]Android:Get audio metadata from URI
目的:我使用 flutter 創建了一個音樂播放器。我想播放來自另一個應用程序的音頻文件。 為此,我使用方法通道在 flutter 和 Android 之間進行通信。我從 Intent 獲取以下 URI。
Received URI:content://com.mi.android.globalFileexplorer.myprovider/external_files/song.mp3
Received PATH:/external_files/song.mp3
我的代碼
private MediaMetadataRetriever song details;
private MetadataDetails[] songDetails;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
songDetails = new MediaMetadataRetriever();
Intent intent = getIntent();
new MethodChannel(AudioServicePlugin.getFlutterEngine(this).getDartExecutor().getBinaryMessenger(), CHANNEL).setMethodCallHandler(
(call, result) -> {
if (call.method.equals("song")) {
if(intent != null && intent.getData() !=null) {
songDetails.setDataSource(intent.getData().getPath());
result.success(songDetails);
}
else {
result.success(null);
}
}
});
}
當我獲取 songDetails 時,出現以下錯誤。
ERROR:setDataSource failed: status = 0xFFFFFFEA
我試過下面的代碼。
FileInputStream file = new FileInputStream(intent.getData().getPath());
songDetails.setDataSource(file.getFD());
但這對我不起作用。
誰能指導我如何去做?
請與以下function查詢
private String generatePath(Uri uri, Context context){
if ("content".equalsIgnoreCase(uri.getScheme())) {
String[] projection = { "_data" };
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow("_data");
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} catch (Exception e) {
// Eat it
}
}
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
將您的文件作為
Uri selectedFileUri = intent.getData();
File filePath = new File(generatePath(selectedFileUri,this));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.