【发布时间】:2013-03-31 17:11:09
【问题描述】:
我正在开发一个 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: 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();
不提供最新的更改。有没有其他方法可以获取最新的更改?
【问题讨论】:
-
您好,我也遇到了同样的问题,请问您有解决办法吗?
-
嗨@Nikhi Agrawal,您能否找到满足观察者的解决方案。由于 File Observer 甚至递归都无法在最新设备上运行。
标签: android android-sdcard contentobserver android-mediascanner fileobserver