android 扫描手机内存和SD卡,获取手机的视频、音频文件。把获取不到的文件扫描出来

 网上查了下android手机扫描内存或者SD卡里面的音频或者视频文件,进行显示。但是有些视频或者音频扫描不出来。有其中一个原因是当你添加了一个视频或者音频文件后,手机自身没有重新进行扫描。只有手机重启之后,手机自身才会进行扫描,才能使用传统的扫描方法扫描出视频、音频文件来。
 所以可以自行添加一个扫描手机内存的方法,在扫描完之后,再使用传统的视频、音频文件获取方式获取来获取。

以下两个方法是用来启动扫描的广播使用的:

    //扫描SD卡的文件
    public void SendReceive_Scand_outside_Music(){
        IntentFilter intentfilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_FINISHED);
        // intentfilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
        intentfilter.addDataScheme("file");
        ScanSdOutsideReceive scanSdReceiver = new ScanSdOutsideReceive();
        MyApp.getInstance().registerReceiver(scanSdReceiver, intentfilter);
        mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
        //        MyApp.getInstance().sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
//       Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath())));

    }

    //扫描内存的文件
    public void SendReceive_Scand_inside_Music(){
        IntentFilter intentfilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_FINISHED);
        // intentfilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
        intentfilter.addDataScheme("file");
        ScanSdInsideReceive scanSdReceiver = new ScanSdInsideReceive();
        MyApp.getInstance().registerReceiver(scanSdReceiver, intentfilter);
        mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getDataDirectory())));
    }  

以下的办法就是扫描文件的广播:

public class ScanSdOutsideReceive extends BroadcastReceiver{


    //private AlertDialog.Builder  builder = null; 
    //private AlertDialog ad = null; 
//    private int count1; 
//    private int count2; 
//    private int count; 
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)){
//            Cursor c2 = context.getContentResolver() 
//            .query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
//                    new String[]{MediaStore.Audio.Media.TITLE, 
//                    MediaStore.Audio.Media.DURATION, 
//                    MediaStore.Audio.Media.ARTIST, 
//                    MediaStore.Audio.Media._ID, 
//                    MediaStore.Audio.Media.DISPLAY_NAME }, 
//                    null, null, null);
        }
    }
}
public class ScanSdInsideReceive extends BroadcastReceiver{


    //private AlertDialog.Builder  builder = null; 
    //private AlertDialog ad = null; 
//    private int count1; 
//    private int count2; 
//    private int count; 
    @Override 
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction(); 
 if(Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)){ 
//            Cursor c2 = context.getContentResolver() 
//            .query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
//                    new String[]{MediaStore.Audio.Media.TITLE, 
//                    MediaStore.Audio.Media.DURATION, 
//                    MediaStore.Audio.Media.ARTIST, 
//                    MediaStore.Audio.Media._ID, 
//                    MediaStore.Audio.Media.DISPLAY_NAME }, 
//                    null, null, null); 
        }    
    } 
}

执行完扫描的广播之后。再调用获取手机的视频、音频的文件方法,也就是我上面所说的传统的获取方式:

获取视频:

            ContentResolver contentResolver = mContext.getContentResolver();
            Cursor cursor = contentResolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);

//          Cursor cursor = mContext.getContentResolver().query(
//                  MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null,
//                  null, null);
            if (cursor != null) {
                while (cursor.moveToNext()) {
                    int id = cursor.getInt(cursor
                            .getColumnIndexOrThrow(MediaStore.Video.Media._ID));
                    String title = cursor
                            .getString(cursor
                                    .getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
                    String album = cursor
                            .getString(cursor
                                    .getColumnIndexOrThrow(MediaStore.Video.Media.ALBUM));
                    String artist = cursor
                            .getString(cursor
                                    .getColumnIndexOrThrow(MediaStore.Video.Media.ARTIST));
                    String displayName = cursor
                            .getString(cursor
                                    .getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME));
                    String mimeType = cursor
                            .getString(cursor
                                    .getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE));
                    String path = cursor
                            .getString(cursor
                                    .getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
                    long duration = cursor
                            .getInt(cursor
                                    .getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
                    long size = cursor
                            .getLong(cursor
                                    .getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));


                        }
                    }

                }
                cursor.close();
            }

获取音频:

        // ContentProvider(内容提供者) 和 ContentResolver(内容解析器),用于管理和发布和应用程序相关的持久性数据
        ContentResolver resolver = mContext.getContentResolver();
        //  String[] projection = new String[]{MediaStore.Video.Media.TITLE};
        Cursor cursor = resolver.query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
                MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
        if (null == cursor) {
            return null;
        }
        cursor.moveToFirst();
        if (cursor.moveToFirst()) {
            do {
                RingItem m = new RingItem();
//自己建的类,用于存放查询到的音乐信息
//播放音乐是用的是创建MediaPlayer实例,为其传递音乐文件的路径
                long id = 0;
                String title = null;
                String arrtist = null ;
                String album=null;
                long size=0;
                long duration=0;
                String url =null;
                String name=null;
                if(cursor.getColumnIndex(MediaStore.Audio.Media._ID)!=-1)
                    id = cursor.getLong(cursor .getColumnIndex(MediaStore.Audio.Media._ID));        //音乐id
                if(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)!=-1)
                    title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); // 标题
                if(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)!=-1)
                    arrtist = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ARTIST)); // 歌手
                if ("<unknown>".equals(arrtist)) {
                    arrtist = MyApp.getInstance().getResources().getString(R.string.unknow_artist);
                }
                if(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)!=-1)
                    album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); // 专辑图片
                if(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)!=-1)
                    size = cursor.getLong(cursor .getColumnIndex(MediaStore.Audio.Media.SIZE)); // 大小
                if(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)!=-1)
                    duration = cursor.getLong(cursor .getColumnIndex(MediaStore.Audio.Media.DURATION)); // 时长
                if(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)!=-1)
                    url = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.DATA)); // 音乐文件的路径
                if(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)!=-1)
                    name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));// 音乐文件名
                if(url!=null&&duration>0){
                    File file = new File(url);
                    if (file.exists()) {

//此处添加music,音乐信息,到列表

                    }
                }
            } while (cursor.moveToNext());
        }
        if (cursor != null) {
//结果集移动到最后一列,再下移为空;释放资源
            cursor.close();
        }
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值