zoukankan      html  css  js  c++  java
  • Android 之 向媒体库添加新媒体

    在默认的情况下。由自己的程序创建,并存储在应用程序私有文件夹中的媒体文件,对其他应用程序来说是不可用的。要想这些媒体文件可以被其他应用程序使用。需要把他们添加到媒体库中,目前有两种方法可以实现。

    第一种:使用媒体扫描仪添加到媒体库。

    /**
         * 扫描指定目录了的文件,添加到媒体库
         * 
         * @param filePath
         *            路径
         */
        private void scanMedia(final String filePath) {
            
            MediaScannerConnectionClient mediaSan = new MediaScannerConnectionClient() {
    
                private MediaScannerConnection msc = null;
                {
                    // 首先需要创建与媒体扫描仪的连接
                    msc = new MediaScannerConnection(MainActivity.this, this);
                    msc.connect();
                }
    
                @Override
                public void onScanCompleted(String path, Uri uri) {
                    // 扫描完成关闭与媒体扫描仪的连接
                    msc.disconnect();
                    MainActivity.this.runOnUiThread(new Runnable() {
    
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "扫描完成!",
                                    Toast.LENGTH_SHORT).show();
                        }
                    });
    
                }
    
                @Override
                public void onMediaScannerConnected() {
                    // 可以指定一个mime类型,如果不指定Media Scaner根据文件名自己假定一种类型
                    String mimeType = null;
                    msc.scanFile(filePath, mimeType);
                }
            };
    
        }
    View Code

    这里主要用到的是“MediaScannerConnectionClient”和“MediaScannerConnection”两个类。

    实现步骤:

    (1)创建与媒体扫描仪的连接。

    (2)调用scanFile方法扫描文件。

    (3)扫描完成后,关闭与扫描仪的连接。

    第二种:手动添加到媒体库

        ContentValues values = new ContentValues();
                    //媒体文件的标题
                    values.put(Audio.AudioColumns.TITLE,"我的媒体文件");
                    //时间戳
                    values.put(Audio.AudioColumns.DATE_ADDED,System.currentTimeMillis()/1000);
                    //文件类型
                    values.put(Audio.AudioColumns.MIME_TYPE,"audio/amr");
                    //指定文件路径。必须是绝对路径
                    values.put(MediaStore.Audio.Media.DATA, "/sdcard/myVideo.mp4");
                    
                    //把文件插入到媒体库ContentProvider中
                    ContentResolver resolver = getContentResolver();
                    Uri uri= resolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
                    
                    //发送广播。通知此媒体文件已经可以用啦
                    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri));
    View Code
  • 相关阅读:
    canvas 文本坐标(0,0)显示问题
    canvas 图片跨域处理
    canvas 文字换行
    什么是柯理化函数?
    记录一下学习webpack原理的过程
    pika和kombu实现rpc代码
    pika和rabbitMQ实现rpc代码
    docker部署rabbitMQ
    rabbitMQ和pika模块
    ubuntu搭建关于amd64或arm64,armhf架构的本地apt源
  • 原文地址:https://www.cnblogs.com/ywtk/p/3868273.html
Copyright © 2011-2022 走看看