我正在开发一个 Android 应用程序,我必须在其中检测 Android SD 卡中音频文件的更改,其中包含文件名、文件路径和对其执行的操作。例如,如果我在我的 SD 卡中添加一个文件,那么我想知道
- 添加的文件名
- 文件路径
- 操作——添加
以前我尝试过文件观察器但为此我必须将它应用于每个目录。所以我搜索了一些其他解决方案并获得了有关Audio.Media.EXTERNAL_CONTENT_URI的信息。然后我创建了一个像这样的内容观察者
UriObserver.java -- 内容观察者
class UriObserver extends ContentObserver {
public UriObserver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
Log.d("INSTANT", "GETTING CHANGES");
}
}
这是它的注册代码
UriObserver observer = new UriObserver(new Handler());
Log.d("INSTANT", "registered content observer");
this.getApplicationContext()
.getContentResolver()
.registerContentObserver(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, false,
observer);
Log.d("INSTANT", "registered content observer");
它让我知道与音频文件相关的 sdcard 发生了一些变化。但它没有提供有关添加、编辑或删除哪个文件的任何信息。
然后我搜索了解决方案并得到了这篇文章
Android:通过 MTP 连接时如何检测 MediaStore 的变化
在这篇文章中, Bhiefer给出了一些代码作为答案,我认为它可以工作,所以我试图实现它,但我无法做到。
我能为此做些什么?
更新
我可以查询 Audio.Media.EXTERNAL_CONTENT_URI 的最新更改吗?这段代码:
mCursor = context.getContentResolver().query(
Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, "_id");
mCursor.moveToLast();
没有给出最新的变化。还有其他方法可以获取最新更改吗?