我正在开发一个 Android 应用程序,需要检测 Android SD 卡中音频文件的更改,包括文件名、文件路径以及执行的操作。例如,如果我在 SD 卡中添加了一个文件,则想知道:
- 添加的文件名称
- 文件路径
- 操作类型 -- 添加
之前我尝试使用文件观察器 (file observer),但这需要对每个目录都应用一次。因此,我搜索了其他解决方案,并了解到了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");
它让我知道在与音频文件有关的SD卡中发生了一些更改。但它没有提供任何关于哪个文件已添加、编辑或删除的信息。
然后我搜索了解决方案并找到了这篇文章:
Android: How to detect a change in MediaStore when connected over MTP
在这篇文章中,Bhiefer给出了一些代码作为答案,我认为它可能有效,因此我尝试实现它,但我做不到。
我该怎么办?
更新
我能查询Audio.Media.EXTERNAL_CONTENT_URI以获取其最新更改吗? 这段代码:
mCursor = context.getContentResolver().query(
Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, "_id");
mCursor.moveToLast();
无法获取最新更改。有没有其他方法可以获取最新更改?