Проблема с провайдером файлов на Android TV - PullRequest
0 голосов
/ 20 июня 2019

Я использую Файловый провайдер для установки загруженного 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"
}

Я получаю предупреждение об отказе в разрешении для провайдера. Пожалуйста, скажите мне, если я должен предоставить какую-то конкретную информацию.

...