Obserwowanie zmian w obserwatorze treści Androida dla Audio.Media.EXTERNAL_CONTENT_URI

Zajmuję się tworzeniem aplikacji na Androida, w której muszę wykrywać zmiany na karcie SD z systemem Android dla plików audio z nazwą pliku, ścieżką pliku i wykonywaną na nim operacją. Przykład, jeśli dodam plik na mojej karcie SD, chcę wiedzieć

Nazwa dodawanego plikuŚcieżka do plikuOperacja - Dodaj

Poprzednio próbowałem obserwatora plików, ale do tego muszę go zastosować w każdym katalogu. Szukałem więc innego rozwiązania i dostałem informacje oAudio.Media.EXTERNAL_CONTENT_URI. Następnie stworzyłem takiego obserwatora treści

UriObserver.java - który jest obserwatorem treści

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");
    }

}

To jest kod do rejestracji

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");

Dało mi to znać, że nastąpiła pewna zmiana w sdcard związanej z plikami audio. Ale nie daje żadnych informacji o tym, który plik został dodany, edytowany lub usunięty.

Potem szukałem rozwiązania i dostałem ten post

Android: Jak wykryć zmianę w MediaStore po połączeniu przez MTP

W tym poście podany jest kodBhiefer jako odpowiedź, która moim zdaniem mogłaby zadziałać, więc próbowałem ją zaimplementować, ale nie jestem w stanie tego zrobić.

Co mogę na to zrobić?

Aktualizacja

Czy mogę zapytać Audio.Media.EXTERNAL_CONTENT_URI o najnowsze zmiany? Ten kod:

mCursor = context.getContentResolver().query(
                    Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, "_id");

mCursor.moveToLast();

nie podaje najnowszych zmian. Czy jest jakaś inna metoda na uzyskanie najnowszych zmian?

questionAnswers(2)

yourAnswerToTheQuestion