Ich habe Problem mit beiden FIleObserver und ContentObserver nicht in Android Eibisch arbeiten. Ich verwende dieses Ding, um Änderungen innerhalb eines Ordners zu erkennen. Ich habe Laufzeitberechtigungen für Marshmallow festgelegt. Aber auch danach zeigt es keine Ereignisse. Es funktioniert perfekt in anderen Versionen. Bitte helfen Sie mir, dieses Problem zu lösen.FIleObserver und ContentObserver arbeiten nicht in Android Eibisch
Zuerst habe ich Content Resolver im Service versucht Ordneränderungen im Hintergrund zu erkennen.
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);
}
}
);
}
}
und Laufzeit-Berechtigungen wie:
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);
}
}
Und erhalten, dass Berechtigungen in onRequestPermissionsResult
führen. Diese Methode hat bei mir nicht funktioniert. Also habe ich versucht mit FileObserver
in diesem Service. Zu dieser Zeit funktioniert es auch in allen anderen Plattformen, aber nicht in Marshmallow.