Я разрабатываю приложение для Android, в котором я должен обнаруживать изменения на SD-карте Android для аудиофайлов с именем файла, путем к файлу и выполняемой над ним операцией. Пример, если я добавляю файл на свою 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");
Это дало мне знать, что в SD-карте произошли некоторые изменения, связанные с аудиофайлами. Но он не дает никакой информации о том, какой файл был добавлен, отредактирован или удален.
Затем я искал решение и получил этот пост
Android: как обнаружить изменение в MediaStore при подключении через MTP
В этом посте Bhiefer дает некоторый код в качестве ответа, который, я думаю, может сработать, поэтому я попытался реализовать его, но не смог.
Что я могу сделать для этого?
Обновлять
Могу ли я запросить Audio.Media.EXTERNAL_CONTENT_URI о последних изменениях? Этот код:
mCursor = context.getContentResolver().query(
Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, "_id");
mCursor.moveToLast();
не дает последние изменения. Есть ли другой способ получить последние изменения?