android 扫描文件(sdcard添加新的音乐文件时候后,可扫描到)
16lz
2021-01-23
如果在sdcard中添加了新的音乐,我们想要把心得音乐添加进listview中,
一种是sendbroadcast()发一个intent给系统,让系统扫描整个sdcard,但是据说这个在android4.4(具体几点几记不清了,可以上网一查)不能使用,我在使用模拟器的时候同样报错,真机调试没问题,或许是真机系统版本低的原因
二是调用MediaScannerConnection.scanFile(context, new String[] {file.getAbsolutePath() },
null, new MyOnScanCompletedListener(i,files.length));
后面那个参数是我自定义的一个类,继承了OnScanCompletedListener接口
private class MyOnScanCompletedListener implements OnScanCompletedListener{private int index ;private int fileNum;public MyOnScanCompletedListener(int index,int fileName) {// TODO Auto-generated constructor stubthis.index = index;this.fileNum = fileName;}@Overridepublic void onScanCompleted(String path, Uri uri) {// Log.i("GetNativeMusicThread", "Scanned " + path + ":"); Log.i("GetNativeMusicThread", "-> uri=" + uri); Log.i("GetNativeMusicThread", "file num is : "+fileNum+" ,index:"+index); ////String[] proj = { MediaStore.Images.Media.DATA };//Cursor actualimagecursor = context.managedQuery(uri,proj,null,null,null);//int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);//actualimagecursor.moveToFirst();//String img_path = actualimagecursor.getString(actual_image_column_index);//File file = new File(img_path);//Uri fileUri = Uri.fromFile(file);Cursor cursor =context.getContentResolver().query(uri, null, null, null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);//List musicInfos = new ArrayList();// Log.e("GetNativeMusicThread", "getmusicinfos+ "+cursor.getCount()+",,,uri :"+MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); if (cursor != null) {//for (int i = 0; i < cursor.getCount(); i++) {while(cursor.moveToNext()){MusicInfo musicInfo = new MusicInfo();//cursor.moveToNext();long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID)); //音乐id String title = cursor.getString((cursor.getColumnIndex(MediaStore.Audio.Media.TITLE))); //音乐标题 String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); //艺术家 long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); //时长long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)); //文件大小 String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); //文件路径 int isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); //是否为音乐 long albumId = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); //albumid System.out.println("in all url: "+ url); Log.i("GetNativeMusicThread", "Scanned title " +",getmusicinfos: "+cursor.getCount()+title+",artist :"+artist+",,size:"+size +",,isMusic:"+isMusic);if (isMusic != 0) {//只把音乐添加到集合当中 musicInfo.setId(id);musicInfo.setTitle(title);musicInfo.setArtist(artist);musicInfo.setDuration(duration);musicInfo.setUrl(url);musicInfo.setSize(size);musicInfo.setAlbumId(albumId);musicInfos.add(musicInfo);}}cursor.close();//扫描到10个文件或者到文件末尾就sendmessageif ((index+1) %10 == 0 || (index+1) == fileNum) {//将音乐文件的信息对象发送出去// musicInfos = getMusicInfos(context);// handler.obtainMessage(CONSTANTS.MSG_GET_NATIVE_MUSIC_SUCCESS, musicInfos).sendToTarget();//这个没想到怎么延时 Message msg = handler.obtainMessage(CONSTANTS.MSG_GET_NATIVE_MUSIC_SUCCESS, musicInfos); handler.sendMessageDelayed(msg, 1000);//延时5秒再发送消息 }}//System.out.println("---------"+musicInfos.size()); } }
这里有一点很奇怪,前几天我用的时候这样扫描之后的音乐信息并不会添加到数据库中去,也就是说不能通过数据库(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI)来查找该音乐的信息,
但是今天突然就可以了,不知道为什么,,,,,
更多相关文章
- Android stutio 中怎么将XML中文件快速findById——Android Layo
- init进程 && 解析Android启动脚本init.rc && 修改它使不启动andr
- Android Developers:保存文件
- Android中读取assets目录下的文件详细介绍