Я разрабатываю приложение 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
Как удалить несколько изображений из внешнего хранилища в Android ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1738062323
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)
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79392794/how-to-delete-multiple-images-from-external-storage-in-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия