В моем приложении есть классическая опция меню «Поделиться этим приложением», которая позволяет сделать два снимка экрана и отправить их по почте вместе с рекламным текстом.
До перехода с Java оно работало нормально. в Котлин, но теперь в Котлине начало выдавать исключение.
Странно то, что даже с исключением (которое можно увидеть в logcat) процесс работает нормально, приложение не происходит сбоев (по крайней мере, не видимым образом), и процесс обмена завершен, например, если вы выберете электронную почту, электронное письмо будет получено вместе с изображениями.
Manifest.xml
android:name=".helpers.GenericFileProvider"
android:authorities="${applicationId}.GenericFileProvider"
android:exported="false"
android:grantUriPermissions="true">
GenericFileProvider:
package com.xxx.xxx.helpers
import androidx.core.content.FileProvider
class GenericFileProvider : FileProvider()
provider_paths.xml:
shareFile:
@JvmStatic
fun shareFile(uris: ArrayList?, fileType: String?) {
try {
val share = Intent(Intent.ACTION_SEND_MULTIPLE)
share.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
share.type = fileType
val strSubject = getStringResourceByName("mainmenu_sharethisapp_subject")
share.putExtra(Intent.EXTRA_SUBJECT, strSubject)
share.putParcelableArrayListExtra(Intent.EXTRA_TEXT, uris)
share.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris)
activity!!.get()!!.startActivity(
Intent.createChooser(
share,
getStringResourceByName("mainmenu_sharethisapp_sharethoughttitle")
)
)
} catch (ex: Exception) {
Toast.makeText(activity!!.get(), ex.message.toString(), Toast.LENGTH_LONG).show()
}
}
onImageProcessingFinished:
fun onImageProcessingFinished(ipr: ImageProcessingResult, activity: Activity) {
val uris = ArrayList()
for (file in ipr.screenShotFiles) {
val uri = FileProvider.getUriForFile(activity, activity.packageName + ".GenericFileProvider", file)
if (uri!=null) uris.add(uri)
}
AWDrawerMenu.listener = activity as IActionListeners
AWDrawerMenu.activity = WeakReference(activity)
AWDrawerMenu.shareFile(uris, "image/jpg")
}
Исключение:
2022-06-16 22:01:08.427 11357-11378/com.xxx.xxx E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading com.xxx.xxx.helpers.GenericFileProvider uri content://com.xxx.xxx.GenericFileProvider/cache/xxx.jpg from pid=6474, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:820)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:684)
at android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:674)
at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:548)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:327)
at android.os.Binder.execTransactInternal(Binder.java:1154)
at android.os.Binder.execTransact(Binder.java:1123)
Изменить 1:
Если я заменю метод onImageProcessingFinished следующим
fun onImageProcessingFinished(ipr: ImageProcessingResult, activity: Activity) {
val uris = ArrayList()
for (file in ipr.screenShotFiles) {
val uri = FileProvider.getUriForFile(activity, activity.packageName + ".helpers.GenericFileProvider", file)
if (uri!=null) uris.add(uri)
}
AWDrawerMenu.listener = activity as IActionListeners
AWDrawerMenu.activity = WeakReference(activity)
AWDrawerMenu.shareFile(uris, "image/jpg")
}
добавив .helpers перед GenericFileProvider (который в конечном итоге является полным именем пакета для GenericFileProvider), выдается следующее исключение (в этом случае происходит сбой DO приложения):< /p>
2022-06-16 21:48:10.203 10694-10694/com.xxx.xxx E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xxx.xxx, PID: 10694
java.lang.IllegalArgumentException: Couldn't find meta-data for provider with authority com.xxx.xxx.helpers.GenericFileProvider
at androidx.core.content.FileProvider.parsePathStrategy(FileProvider.java:662)
at androidx.core.content.FileProvider.getPathStrategy(FileProvider.java:635)
at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:441)
at com.xxx.xxx.component.drawer.AWDrawer$Companion.onImageProcessingFinished(AWDrawer.kt:294)
at com.xxx.xxx.activities.main.MainActivity.onImageProcessingFinished(MainActivity.kt:448)
at com.xxx.xxx.activities.main.MainActivity.onShareThisApp$lambda-6(MainActivity.kt:443)
at com.xxx.xxx.activities.main.MainActivity.$r8$lambda$c-xNLWLGog-3ah1DvHN4y6HCHsw(Unknown Source:0)
at com.xxx.xxx.activities.main.MainActivity$$ExternalSyntheticLambda3.onComplete(Unknown Source:4)
at com.xxx.xxx.helpers.TaskRunner.executeAsync$lambda-1$lambda-0(TaskRunner.kt:24)
at com.xxx.xxx.helpers.TaskRunner.$r8$lambda$ItjAcdIefpXj05LbTtje15JKSPM(Unknown Source:0)
at com.xxx.xxx.helpers.TaskRunner$$ExternalSyntheticLambda0.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Подробнее здесь: https://stackoverflow.com/questions/726 ... r-provider
Kotlin: java.lang.IllegalArgumentException: не удалось найти метаданные для поставщика с полномочиями xxx. ⇐ Android
Форум для тех, кто программирует под Android
1730313741
Anonymous
В моем приложении есть классическая опция меню «Поделиться этим приложением», которая позволяет сделать два снимка экрана и отправить их по почте вместе с рекламным текстом.
До перехода с Java оно работало нормально. в Котлин, но теперь в Котлине начало выдавать исключение.
Странно то, что даже с исключением (которое можно увидеть в logcat) процесс работает нормально, приложение не происходит сбоев (по крайней мере, не видимым образом), и процесс обмена завершен, например, если вы выберете электронную почту, электронное письмо будет получено вместе с изображениями.
Manifest.xml
android:name=".helpers.GenericFileProvider"
android:authorities="${applicationId}.GenericFileProvider"
android:exported="false"
android:grantUriPermissions="true">
GenericFileProvider:
package com.xxx.xxx.helpers
import androidx.core.content.FileProvider
class GenericFileProvider : FileProvider()
provider_paths.xml:
shareFile:
@JvmStatic
fun shareFile(uris: ArrayList?, fileType: String?) {
try {
val share = Intent(Intent.ACTION_SEND_MULTIPLE)
share.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
share.type = fileType
val strSubject = getStringResourceByName("mainmenu_sharethisapp_subject")
share.putExtra(Intent.EXTRA_SUBJECT, strSubject)
share.putParcelableArrayListExtra(Intent.EXTRA_TEXT, uris)
share.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris)
activity!!.get()!!.startActivity(
Intent.createChooser(
share,
getStringResourceByName("mainmenu_sharethisapp_sharethoughttitle")
)
)
} catch (ex: Exception) {
Toast.makeText(activity!!.get(), ex.message.toString(), Toast.LENGTH_LONG).show()
}
}
onImageProcessingFinished:
fun onImageProcessingFinished(ipr: ImageProcessingResult, activity: Activity) {
val uris = ArrayList()
for (file in ipr.screenShotFiles) {
val uri = FileProvider.getUriForFile(activity, activity.packageName + ".GenericFileProvider", file)
if (uri!=null) uris.add(uri)
}
AWDrawerMenu.listener = activity as IActionListeners
AWDrawerMenu.activity = WeakReference(activity)
AWDrawerMenu.shareFile(uris, "image/jpg")
}
Исключение:
2022-06-16 22:01:08.427 11357-11378/com.xxx.xxx E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading com.xxx.xxx.helpers.GenericFileProvider uri content://com.xxx.xxx.GenericFileProvider/cache/xxx.jpg from pid=6474, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:820)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:684)
at android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:674)
at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:548)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:327)
at android.os.Binder.execTransactInternal(Binder.java:1154)
at android.os.Binder.execTransact(Binder.java:1123)
Изменить 1:
Если я заменю метод onImageProcessingFinished следующим
fun onImageProcessingFinished(ipr: ImageProcessingResult, activity: Activity) {
val uris = ArrayList()
for (file in ipr.screenShotFiles) {
val uri = FileProvider.getUriForFile(activity, activity.packageName + ".helpers.GenericFileProvider", file)
if (uri!=null) uris.add(uri)
}
AWDrawerMenu.listener = activity as IActionListeners
AWDrawerMenu.activity = WeakReference(activity)
AWDrawerMenu.shareFile(uris, "image/jpg")
}
добавив .helpers перед GenericFileProvider (который в конечном итоге является полным именем пакета для GenericFileProvider), выдается следующее исключение (в этом случае происходит сбой DO приложения):< /p>
2022-06-16 21:48:10.203 10694-10694/com.xxx.xxx E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xxx.xxx, PID: 10694
java.lang.IllegalArgumentException: Couldn't find meta-data for provider with authority com.xxx.xxx.helpers.GenericFileProvider
at androidx.core.content.FileProvider.parsePathStrategy(FileProvider.java:662)
at androidx.core.content.FileProvider.getPathStrategy(FileProvider.java:635)
at androidx.core.content.FileProvider.getUriForFile(FileProvider.java:441)
at com.xxx.xxx.component.drawer.AWDrawer$Companion.onImageProcessingFinished(AWDrawer.kt:294)
at com.xxx.xxx.activities.main.MainActivity.onImageProcessingFinished(MainActivity.kt:448)
at com.xxx.xxx.activities.main.MainActivity.onShareThisApp$lambda-6(MainActivity.kt:443)
at com.xxx.xxx.activities.main.MainActivity.$r8$lambda$c-xNLWLGog-3ah1DvHN4y6HCHsw(Unknown Source:0)
at com.xxx.xxx.activities.main.MainActivity$$ExternalSyntheticLambda3.onComplete(Unknown Source:4)
at com.xxx.xxx.helpers.TaskRunner.executeAsync$lambda-1$lambda-0(TaskRunner.kt:24)
at com.xxx.xxx.helpers.TaskRunner.$r8$lambda$ItjAcdIefpXj05LbTtje15JKSPM(Unknown Source:0)
at com.xxx.xxx.helpers.TaskRunner$$ExternalSyntheticLambda0.run(Unknown Source:4)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Подробнее здесь: [url]https://stackoverflow.com/questions/72651390/kotlin-java-lang-illegalargumentexception-couldnt-find-meta-data-for-provider[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия