将mp3添加到ContentResolver

Mac*_*rse 3 android

我知道从你的应用程序下载一个MP3后,你需要将它添加到ContentResolver音乐播放器上看到它.我正在使用以下代码:

    private void addFileToContentProvider() {
        ContentValues values = new ContentValues(7);

        values.put(Media.DISPLAY_NAME, "display_name");
        values.put(Media.ARTIST, "artist");
        values.put(Media.ALBUM, "album");
        values.put(Media.TITLE, "Title"); 
        values.put(Media.MIME_TYPE, "audio/mp3"); 
        values.put(Media.IS_MUSIC, true);
        values.put(Media.DATA, pathToFile);

        context.getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); 

    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,我愿意避免设置DISPLAY_NAME,ARTIST,ALBUM,TITLE手工制作.

有没有办法告诉Android从文件中执行此操作?我已经使用过,values.put(Media.DATA, pathToFile);但它没有添加到播放器中.

有没有办法强制扫描sd的音乐线程?

mag*_*man 6

首先尝试添加:

values.put(MediaStore.Audio.Media.IS_MUSIC, true);
Run Code Online (Sandbox Code Playgroud)

然后尝试这个:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename)));
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,试试这个:

public MediaScannerConnection mScanner = null;

public void reScan(String filename){
    final String name = filename;
    mScanner = new MediaScannerConnection(THE_NAME_OF_YOUR_ACTIVITY.this, new MediaScannerConnection.MediaScannerConnectionClient() {
        public void onMediaScannerConnected() { 
            mScanner.scanFile(name, null); 
        } 
        public void onScanCompleted(String path, Uri uri) {
            if (path.equals(name)) {
                mScanner.disconnect(); 
            } 
        }
    }); 
    mScanner.connect(); 
}
Run Code Online (Sandbox Code Playgroud)

添加mp3后,只需调用此方法,该方法将文件名作为输入.

并确保将THE_NAME_OF_YOUR_ACTIVITY替换为您的活动名称.