所以我有一个列表视图,显示我的设备上的每个音频文件。它运行良好,但它在第一次使用后没有更新,如果我将复制新的音频文件添加到我的设备,它将不会显示在列表视图中。它仅在我重新安装应用程序时显示
String[] proj = { MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Video.Media.SIZE };
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean samples = getPrefs.getBoolean("checkbox", false);
if (samples==false)
musiccursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,proj, null, null, null);
else{
musiccursor = managedQuery(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,proj, null, null, null);}
count = musiccursor.getCount();
musiclist = (ListView) findViewById(R.id.PhoneMusicList);
musiclist.setAdapter(new MusicAdapter(getApplicationContext(), count, null));
musiclist.setOnItemClickListener(musicgridlistener);
UPDATE
经过一些研究,我发现我需要更新MediaStore,我知道我可以使用sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("FILENAME"+ Environment.getExternalStorageDirectory())));
扫描一个文件,但我怎么能为所有音频文件执行此操作?
答案 0 :(得分:1)
您必须通知Listview计数值已更改。因此,在MusicAdapter中创建一个方法,在Listview中设置新的内容列表。
答案 1 :(得分:0)
通知您的音乐适配器,以便它可以更新。试试这个:
MusicAdapter.notifyDataSetChanged();
答案 2 :(得分:0)
使列表适配器(MusicAdapter)扩展android.widget.CursorAdapter将允许它跟踪底层内容提供程序中的更改并更新关联的列表视图。
此外,很久以前不推荐使用Activity.managedQuery,请使用loaders将游标与活动生命周期相关联。
答案 3 :(得分:0)
添加按钮以重新检查计算机上的所有音频文件。在此按钮上单击,使用与您现在使用相同的过程来检测音频文件。检测完所有文件后,更新listView的适配器。