Я использую Файловый провайдер для установки загруженного APK с помощью установщика пакетов Google на Android TV, но всегда зависаю при ошибке разбора пакета.
Та же самая кодовая база отлично работает на ОС Android мобильного телефона, но не на Android TV. Отметим, что Mine является системным приложением и обладает всеми необходимыми разрешениями, такими как REQUEST_INSTALL_PACKAGES, READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE, но все же не повезло.
Может кто-нибудь, пожалуйста, помогите мне, если это известная ошибка на Android TV или есть что-то особенное, нуждающееся в моем внимании.
Контрольный список:
1. Провайдер перепроверен с полномочиями на выдачу UIPermissions
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
provider_paths.xml
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
<files-path
name="data"
path="."/>
<cache-path
name="cache"
path="." />
<external-path name="external_download" path="Download"/>
<external-files-path name="Download" path="Download/" />
val uri = FileProvider.getUriForFile(this@MainActivity, BuildConfig.APPLICATION_ID+".provider", file)
val intent = Intent(Intent.ACTION_VIEW)
intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
intent.setDataAndType(uri, "application/vnd.android.package-archive")
val resInfoList = context?.packageManager?.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
resInfoList?.let {
for (res in resInfoList) {
val packageName = res.activityInfo.packageName
context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
}
}
startActivity(intent)
internal fun getDownloadFileLoc(context: Context): String {
val fileDir = "${Environment.getExternalStorageDirectory()}/download"
val fileName = context.getString(R.string.apk_name)
return "$fileDir/$fileName"
}
Я получаю предупреждение об отказе в разрешении для провайдера. Пожалуйста, скажите мне, если я должен предоставить какую-то конкретную информацию.