Как удалить фотографии с SD-карты? - PullRequest
0 голосов
/ 26 октября 2018

Я нашел эту тему в переполнении стека. Я попробовал первый ответ . Это не сработало. Фотографии все еще находятся в приложении «Фотографии» телефона после того, как delete () вернет true. Я пытался этот второй ответ . Тоже не сработало.

Тогда я попытался этот третий ответ .

Вот мой код после некоторой адаптации третьего ответа. imagesEncodedList - это ArrayList путей к файлам строк фотографий, которые я хочу удалить:

String[] selectionArgs = new String[imagesEncodedList.size()];
for(int i=0; i<imagesEncodedList.size();i++) {
  selectionArgs[i]=imagesEncodedList.get(i);
 }

 //delete original
// Set up the projection (we only need the ID)
 String[] projection = { MediaStore.Images.Media._ID };

// Match on the file path
 String selection = MediaStore.Images.Media.DATA + " = ?";

// Query for the ID of the media matching the file path
 Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
 ContentResolver contentResolver = getContentResolver();
Cursor c = contentResolver.query(queryUri, projection, selection, 
  selectionArgs, null);
if (c.moveToFirst()) {
   // We found the ID. Deleting the item via the content provider will also 
    remove the file
   long id = c.getLong(c.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
  Uri deleteUri = 
  ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
contentResolver.delete(deleteUri, null, null);
  } else {
    // File not found in media store DB
  }
 c.close();

Я не знаю, как работает contentResolver.query (). Я запустил свое приложение, и появляется сообщение об ошибке со ссылкой на строку, в которой был инициализирован курсор c:

Причина: java.lang.IllegalArgumentException: Невозможно связать аргумент в индексе 2, поскольку индекс выходит за пределы диапазона. Оператор имеет 1 параметр.

Какой аргумент находится в индексе 2? Что имеет только 1 параметр?

...