簡體   English   中英

Android:從URI獲取音頻元數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM