Вопрос, относящийся к API платформ Android от 30 до 35, приложение ориентировано на API 33.
Задача моего приложения для Android — синхронизировать музыкальную библиотеку пользователей на компьютере с Android. Это включает в себя добавление мультимедийных файлов, таких как музыка, видео, на Android, а также удаление.
Добавление и удаление работает, когда приложение установлено, однако при переустановке приложение может добавлять дополнительные файлы во время синхронизации, но если элементы необходимо удалить, потому что пользователь удалил носитель из своей библиотеки на компьютере, он выходит из строя. MediaItems невозможно удалить в Android. Файлов, которые нужно добавить или удалить, несколько десятков, иногда сотни. Функции добавления и удаления приведены ниже.
Я понимаю, что начиная с API 29/30, если приложение переустанавливается, оно теряет право собственности на свои файлы. Но это не имеет смысла, когда пользователь переустанавливает приложение, весь ранее сохраненный контент игнорируется и для повторной синхронизации используется новый каталог. Как решить эту проблему, какое решение является лучшим.
void addAudioToMediaStore(InputStream inStream) {
// Code to an audio media to mediastore
Uri audioCollection = MediaStore.Audio.Media
.getContentUri(MediaStor
ContentValues songDetails = new ContentValues();
songDetails.put(MediaStore.Audio.Media.DISPLAY_NAME,
filename);
songDetails.put(MediaStore.Audio.Media.RELATIVE_PATH,
String.format("Music/Library/%s/%s/",artist,album));
songDetails.put(MediaStore.Audio.Media.IS_PENDING, 1);
Uri songContentUri = resolver
.insert(audioCollection, songDetails);
byte[] buffer = new byte[1024 * 250];
long nTotalBytes = 0;
try
{
OutputStream os = resolver.openOutputStream(songContentUri, "rw");
while (nTotalBytes != size)
{
int nRead = inStream.read(buffer, 0, buffer.length);
if (nRead >= 0) {
os.write(buffer, 0, nRead);
nTotalBytes += nRead;
} else {
Log.d("TEST API 30-35 MEDIASTORE", String.format("Warning() read returned -1"));
break;
}
}
os.flush();
os.close();
} catch (Exception e) {
throw new RuntimeException(e);
}finally {
return false;
}
songDetails.clear();
songDetails.put(MediaStore.Audio.Media.IS_PENDING, 0);
int result = resolver.update(songContentUri, songDetails, null, null);
return true;
}
и удаление работает следующим образом
public int deleteMediaStoreRecords(String artist, String album, String filename) {
Uri audioCollection = MediaStore.Audio.Media
.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
String relativePath = "%Library/"+artist+"/"+album+"%";
String selection = MediaStore.Audio.Media.DISPLAY_NAME + " LIKE ?" + " AND " + MediaStore.Audio.Media.RELATIVE_PATH + " LIKE ?" ;
// TODO This will break if we have no matching item in the MediaStore.
int numDeleted = context.getContentResolver().delete(audioCollection,
selection,
new String[]{filename,relativePath}
);
return numDeleted;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -reinstall
Элементы mediaStore больше нельзя удалить после переустановки. ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1733406683
Anonymous
Вопрос, относящийся к API платформ Android от 30 до 35, приложение ориентировано на API 33.
Задача моего приложения для Android — синхронизировать музыкальную библиотеку пользователей на компьютере с Android. Это включает в себя добавление мультимедийных файлов, таких как музыка, видео, на Android, а также удаление.
Добавление и удаление работает, когда приложение установлено, однако при переустановке приложение может добавлять дополнительные файлы во время синхронизации, но если элементы необходимо удалить, потому что пользователь удалил носитель из своей библиотеки на компьютере, он выходит из строя. MediaItems невозможно удалить в Android. Файлов, которые нужно добавить или удалить, несколько десятков, иногда сотни. Функции добавления и удаления приведены ниже.
Я понимаю, что начиная с API 29/30, если приложение переустанавливается, оно теряет право собственности на свои файлы. Но это не имеет смысла, когда пользователь переустанавливает приложение, весь ранее сохраненный контент игнорируется и для повторной синхронизации используется новый каталог. Как решить эту проблему, какое решение является лучшим.
void addAudioToMediaStore(InputStream inStream) {
// Code to an audio media to mediastore
Uri audioCollection = MediaStore.Audio.Media
.getContentUri(MediaStor
ContentValues songDetails = new ContentValues();
songDetails.put(MediaStore.Audio.Media.DISPLAY_NAME,
filename);
songDetails.put(MediaStore.Audio.Media.RELATIVE_PATH,
String.format("Music/Library/%s/%s/",artist,album));
songDetails.put(MediaStore.Audio.Media.IS_PENDING, 1);
Uri songContentUri = resolver
.insert(audioCollection, songDetails);
byte[] buffer = new byte[1024 * 250];
long nTotalBytes = 0;
try
{
OutputStream os = resolver.openOutputStream(songContentUri, "rw");
while (nTotalBytes != size)
{
int nRead = inStream.read(buffer, 0, buffer.length);
if (nRead >= 0) {
os.write(buffer, 0, nRead);
nTotalBytes += nRead;
} else {
Log.d("TEST API 30-35 MEDIASTORE", String.format("Warning() read returned -1"));
break;
}
}
os.flush();
os.close();
} catch (Exception e) {
throw new RuntimeException(e);
}finally {
return false;
}
songDetails.clear();
songDetails.put(MediaStore.Audio.Media.IS_PENDING, 0);
int result = resolver.update(songContentUri, songDetails, null, null);
return true;
}
и удаление работает следующим образом
public int deleteMediaStoreRecords(String artist, String album, String filename) {
Uri audioCollection = MediaStore.Audio.Media
.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
String relativePath = "%Library/"+artist+"/"+album+"%";
String selection = MediaStore.Audio.Media.DISPLAY_NAME + " LIKE ?" + " AND " + MediaStore.Audio.Media.RELATIVE_PATH + " LIKE ?" ;
// TODO This will break if we have no matching item in the MediaStore.
int numDeleted = context.getContentResolver().delete(audioCollection,
selection,
new String[]{filename,relativePath}
);
return numDeleted;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79254923/mediastore-items-can-no-longer-be-deleted-after-reinstall[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия