Как удалить несколько изображений из внешнего хранилища в AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как удалить несколько изображений из внешнего хранилища в Android

Сообщение Anonymous »

Я разрабатываю приложение Vault, которое маскирует себя как калькулятор; Когда на клавиатуре введен секретный код, и нажата кнопка '=', страница Vault открывается. Полем URI с выбранными изображениями передается функции для копирования изображений во внутреннюю хранилище, а затем удалить их из внешнего хранилища. .delete (uri), я получаю эту ошибку, не найденную ошибку в Logcact, и изображение не удалено из внешнего хранилища < /p>
Error saving file: Volume picker not found
java.lang.IllegalArgumentException: V o l u m e p i c k e r n o t f o u n d < b r / > a t a n d r o i d . d a t a b a s e . D a t a b a s e U t i l s . r e a d E x c e p t i o n F r o m P a r c e l ( D a t a b a s e U t i l s . j a v a : 1 7 2 ) < b r / > a t a n d r o i d . d a t a b a s e . D a t a b a s e U t i l s . r e a d E x c e p t i o n F r o m P a r c e l ( D a t a b a s e U t i l s . j a v a : 1 4 2 ) < b r / > a t a n d r o i d . c o n t e n t . C o n t e n t P r o v i d e r P r o x y . d e l e t e ( C o n t e n t P r o v i d e r N a t i v e . j a v a : 6 2 9 ) < b r / > a t a n d r o i d . c o n t e n t . C o n t e n t R e s o l v e r . d e l e t e ( C o n t e n t R e s o l v e r . j a v a : 2 3 7 0 ) < b r / > at android.content.ContentResolver.delete(ContentResolver.java:2330)
at com.example.basiccalculator.HiddenPageKt.HiddenPageGalleryView$moveMediaToInternalStorage(HiddenPage.kt:218)
at com.example.basiccalculator.HiddenPageKt.access$HiddenPageGalleryView$moveMediaToInternalStorage(HiddenPage.kt:1)
at com.example.basiccalculator.HiddenPageKt$HiddenPageGalleryView$pickMediaLauncher$1.invoke(HiddenPage.kt:234)
at com.example.basiccalculator.HiddenPageKt$HiddenPageGalleryView$pickMediaLauncher$1.invoke(HiddenPage.kt:229)
at androidx.activity.compose.ActivityResultRegistryKt$rememberLauncherForActivityResult$1$1.invoke$lambda$0(ActivityResultRegistry.kt:106)
at androidx.activity.compose.ActivityResultRegistryKt$rememberLauncherForActivityResult$1$1.$r8$lambda$VLs2Oqd6MzDD-LGilzyhNhDSH_4(Unknown Source:0)
at androidx.activity.compose.ActivityResultRegistryKt$rememberLauncherForActivityResult$1$1$$ExternalSyntheticLambda0.onActivityResult(D8$$SyntheticClass:0)
at androidx.activity.result.ActivityResultRegistry.doDispatch(ActivityResultRegistry.kt:371)
at androidx.activity.result.ActivityResultRegistry.dispatchResult(ActivityResultRegistry.kt:331)
at androidx.activity.ComponentActivity.onActivityResult(ComponentActivity.kt:786)
at android.app.Activity.dispatchActivityResult(Activity.java:8471)
at android.app.ActivityThread.deliverResults(ActivityThread.java:5509)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:5555)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2345)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:344)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)
< /code>
Вот полный фрагмент функции: < /p>
fun moveMediaToInternalStorage(context: Context, uris: List) {
uris.forEach { uri ->
Log.d("URI", "$uri")
try {

val inputStream = context.contentResolver.openInputStream(uri)
?: throw IOException("Unable to open input stream for URI: $uri")

val cursor = context.contentResolver.query(uri, null, null, null, null)
val displayName = cursor?.use {
if (it.moveToFirst()) it.getString(it.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME))
else "file_${System.currentTimeMillis()}"
} ?: "file_${System.currentTimeMillis()}"

val targetFile = File(context.filesDir, displayName)

context.openFileOutput(displayName, Context.MODE_PRIVATE).use { outputStream ->
inputStream.use { input ->
input.copyTo(outputStream)
}
}

// Delete the original file from external storage after copying
context.contentResolver.delete(uri, null, null)

} catch (e: Exception) {
Log.e("InternalStorage", "Error saving file: ${e.message}", e)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... in-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»