Tôi gặp vấn đề với cả hai FIleObserver và ContentObserver không hoạt động trong Android Marshmallow. Tôi đang sử dụng điều này để phát hiện những thay đổi xảy ra bên trong một thư mục. Tôi thiết lập thời gian chạy quyền cho marshmallow. Nhưng sau đó nó cũng cho thấy không có sự kiện. Nó hoạt động hoàn hảo trong các phiên bản khác. Làm ơn hãy giúp tôi giải quyết vấn đề này.FIleObserver và ContentObserver không hoạt động trong Android Marshmallow
Trước tiên, tôi đã thử Trình phân giải nội dung bên trong Dịch vụ để phát hiện các thay đổi thư mục trong nền.
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);
}
}
);
}
}
Và điều khoản thời gian chạy như:
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);
}
}
Và nhận rằng quyền dẫn đến onRequestPermissionsResult
. Phương pháp này không hiệu quả đối với tôi. Vì vậy, tôi đã thử với FileObserver
bên trong dịch vụ đó. Thời gian đó nó cũng hoạt động trong tất cả các nền tảng khác, nhưng không phải là Marshmallow.