Bee大前端 2015-04-10 02:02 采纳率: 66.7%
浏览 2143
已采纳

新下载的MP3文件是如何实时添加到android的多媒体数据库的?

做一个音乐播放器,有个本地扫描功能,大家都知道是使用contentresover 来获取媒体库
的数据的,但是我新下载的MP3
文件如何能实时的扫描到本地音乐库呢?网上用的两种方法,
Intent mediaScanIntent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(new File(Environment
.getExternalStorageDirectory().toString()));
mediaScanIntent.setData(contentUri);
context.sendBroadcast(mediaScanIntent);

                    还有context.sendBroadcast(new Intent(
                            Intent.ACTION_MEDIA_MOUNTED,
                            Uri.parse("file://"
                                    + Environment
                                            .getExternalStorageDirectory()
                                            .getAbsolutePath())));
                                            并不是每个手机都有效的,就算有效,扫描时间也特别长,怎么能像QQ音乐那样 ,实时的就更新到本地数据库的呢?
  • 写回答

1条回答 默认 最新

  • Bee大前端 2015-05-14 08:21
    关注

    解决了。。。首先扫描制定 文件的类

    public class MediaScannerFile {
    
        /**
         * 扫描指定的文件
         * 
         * @param context
         * @param filePath
         * @param sListener
         */
        public MediaScannerConnection scanFile(Context context,
                String[] filePath, String[] mineType,
                OnScanCompletedListener sListener) {
    
            ClientProxy client = new ClientProxy(filePath, mineType, sListener);
    
            try {
                MediaScannerConnection connection = new MediaScannerConnection(
                        context.getApplicationContext(), client);
                client.mConnection = connection;
                connection.connect();
                return connection;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        class ClientProxy implements MediaScannerConnectionClient {
    
            final String[] mPaths;
            final String[] mMimeTypes;
            final OnScanCompletedListener mClient;
            MediaScannerConnection mConnection;
            int mNextPath;
    
            ClientProxy(String[] paths, String[] mimeTypes,
                    OnScanCompletedListener client) {
                mPaths = paths;
                mMimeTypes = mimeTypes;
                mClient = client;
            }
    
            public void onMediaScannerConnected() {
                scanNextPath();
            }
    
            public void onScanCompleted(String path, Uri uri) {
                if (mClient != null) {
                    mClient.onScanCompleted(path, uri);
                }
                scanNextPath();
            }
    
            /**
             * 自动扫描下一个
             */
            void scanNextPath() {
                if (mNextPath >= mPaths.length) {
                    mConnection.disconnect();
                    return;
                }
                String mimeType = mMimeTypes != null ? mMimeTypes[mNextPath]
                        : null;
                mConnection.scanFile(mPaths[mNextPath], mimeType);
                mNextPath++;
            }
        }
    }
    
    

    调用

    添加扫描完毕的监听:

        MediaScannerFile mMediaScannerFile = new MediaScannerFile();
    
                                    if (null != mMediaScannerFile) {
    
                                        mMediaScannerFile
                                                .scanFile(context,
                                                        new String[] { dinfo
                                                                .getSavePath() },
                                                        null, new OnScanCompletedListener());
                                    }
    
    
        public void onScanCompleted(final String path, final Uri uri) {
    
        //to do  something
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误