Удалить фото в Android API v29 из фоновой задачи - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь удалить фотографию в фоновом режиме. Это легко сделать до Android API v29:

context.getContentResolver().delete(ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image_id), null, null);

, но с Android API v29 это вызовет RecoverableSecurityException. Это связано с требованиями к ограниченному хранилищу Android Q. Эта документация объясняет, как обращаться с RecoverableSecurityException. Вот моя адаптация:

try {
    context.getContentResolver().delete(ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image_id), null, null);
} catch (SecurityException securityException) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        RecoverableSecurityException recoverableSecurityException;
        if (securityException instanceof RecoverableSecurityException) {
            recoverableSecurityException = (RecoverableSecurityException)securityException;
        } else {
            throw new RuntimeException(securityException.getMessage(), securityException);
        }
        IntentSender intentSender = recoverableSecurityException.getUserAction().getActionIntent().getIntentSender();

        startIntentSenderForResult(intentSender, image-request-code, null, 0, 0, 0, null);
    } else {
        throw new RuntimeException(securityException.getMessage(), securityException);
    }
}

Приведенный выше код из этой документации вызывает startIntentSenderForResult сам по себе без активности. Мне не удалось заставить это работать. Имейте в виду, что это фоновая задача, поэтому у меня нет ссылки на действие. Мне удалось создать новое действие в этой фоновой задаче, запустить это действие и затем позвонить startIntentSenderForResult, но проблема в том, что действие запускается только тогда, когда приложение открыто, что неприемлемо для моих требований. Поскольку Android API v29, строгие правила были введены, когда деятельность может быть запущена.

Это привело бы меня к решению:

  • Is есть ли способ запустить действие в фоновой задаче, не открывая приложение?
  • Есть ли способ вызвать startIntentSenderForResult из моей фоновой задачи?

Спасибо!

...