gpt4 book ai didi

android - FIleObserver 和 ContentObserver 在 Android Marshmallow 中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:57:29 25 4
gpt4 key购买 nike

我遇到了 FIleObserverContentObserver 在 Android Marshmallow 中不工作的问题。我正在使用这个东西来检测文件夹内发生的变化。我为棉花糖设置了运行时权限。但在那之后它也没有显示任何事件。它在其他版本中完美运行。请帮我解决这个问题。

首先,我尝试在 Service 中使用 Content Resolver 来检测背景中的文件夹更改。

public class TestService extends Service {

@Override
public void onCreate() {
super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
initial();
return START_STICKY;
}

public void initial(){
getContentResolver().registerContentObserver(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
true,
new ContentObserver(new Handler()) {
@Override
public boolean deliverSelfNotifications() {
Log.d("hai", "deliverSelfNotifications");
return super.deliverSelfNotifications();
}

@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
}

@Override
public void onChange(boolean selfChange, Uri uri) {

if (uri.toString().matches(MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString() + "/[0-9]+")) {

Cursor cursor = null;
try {
cursor = getContentResolver().query(uri, new String[] {
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATA
}, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
final String fileName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
final String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
// TODO: apply filter on the file name to ensure it's screen shot event
Log.d("file", "FILE CHANGE OCCURED " + fileName + " " + path);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
super.onChange(selfChange, uri);
}
}
);

}
}

运行时权限为:

private void getPermission(){
boolean hasPermission = (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_READ_STORAGE);
}
}

并在 onRequestPermissionsResult 中收到权限结果。这种方法对我不起作用。所以我尝试在该服务中使用 FileObserver 。那时它也适用于所有其他平台,但不适用于 Marshmallow。

最佳答案

这似乎是 Marshmallow 中的一个错误,see here .

您只能尝试通过轮询您需要的任何信息来解决这个问题。

这对您的效果取决于您的用例。我发现它可用于跟踪下载进度:下载开始时开始轮询,间隔一秒,下载完成时停止。

如果您希望更改频率非常低,您可以尝试增加间隔 - 代价是更改发生和您的应用程序接收它们之间的延迟时间可能更长。

关于android - FIleObserver 和 ContentObserver 在 Android Marshmallow 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36237314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com