【问题标题】:SecurityException: Selection not allowed for content://android.media.tv/channelSecurityException:内容不允许选择://android.media.tv/channel
【发布时间】:2021-03-11 19:46:27
【问题描述】:

在我的代码 sn-p 中:

val uri: Uri = TvContractCompat.Channels.CONTENT_URI
context.contentResolver.query(uri, null, null, null, null)?.let { cursor->
    if(cursor.count > 0) {
        cursor.moveToFirst()
        do {
            val channel = Channel.fromCursor(cursor)
        } while (cursor.moveToNext() && cursor.isLast.not())
    }
} 

我收到以下错误消息:

2021-03-11 20:32:29.509 7285-7285/com.example.tvapp E/AndroidRuntime: 致命例外:主要 进程:com.example.tvapp,PID:7285 java.lang.SecurityException:内容不允许选择://android.media.tv/channel 在 android.os.Parcel.createException(Parcel.java:1950) 在 android.os.Parcel.readException(Parcel.java:1918) 在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 在 android.content.ContentProviderProxy.query(ContentProviderNative.java:418) 在 android.content.ContentResolver.query(ContentResolver.java:802) 在 android.content.ContentResolver.query(ContentResolver.java:752) 在 android.content.ContentResolver.query(ContentResolver.java:710)

在我的清单中我已经有了:

    <uses-permission android:name="com.android.providers.tv.permission.READ_EPG_DATA" />
    <uses-permission android:name="com.android.providers.tv.permission.ACCESS_ALL_EPG_DATA"/>

由于我没有向 EPG 写入任何内容,因此我没有其他权限:

无论如何,在获得该许可的情况下,我得到了那个错误。

顺便说一句。当我从我的 /system 文件夹(更高的访问级别)运行应用程序时,代码正在运行并且我得到了频道

【问题讨论】:

    标签: android-tv android-contentresolver


    【解决方案1】:

    我无法重现您的问题,因此我决定发布相关代码 - 也许它会以某种方式帮助您。因此,应用程序启动正常,没有抛出异常。

    app/build.gradle

    plugins {
        id 'com.android.application'
        id 'kotlin-android'
    }
    
    android {
        compileSdkVersion 30
        buildToolsVersion "30.0.2"
    
        defaultConfig {
            applicationId "com.example.sampletv"
            minSdkVersion 21
            targetSdkVersion 30
            versionCode 1
            versionName "1.0"
    
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
    
        implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
        implementation 'com.android.support:leanback-v17:28.0.0'
        implementation 'com.android.support:appcompat-v7:28.0.0'
        implementation 'com.github.bumptech.glide:glide:3.8.0'
        implementation 'androidx.tvprovider:tvprovider:1.0.0'
    }
    

    AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.sampletv">
    
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
    
        <uses-feature
            android:name="android.hardware.touchscreen"
            android:required="false" />
        <uses-feature
            android:name="android.software.leanback"
            android:required="true" />
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/Theme.Sampletv">
            <activity
                android:name=".MainActivity"
                android:banner="@drawable/app_icon_your_company"
                android:icon="@drawable/app_icon_your_company"
                android:label="@string/app_name"
                android:logo="@drawable/app_icon_your_company"
                android:screenOrientation="landscape">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    

    MainActivity.kt

    package com.example.sampletv
    
    import android.app.Activity
    import android.net.Uri
    import android.os.Bundle
    import androidx.tvprovider.media.tv.Channel
    import androidx.tvprovider.media.tv.TvContractCompat
    
    class MainActivity : Activity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            val uri: Uri = TvContractCompat.Channels.CONTENT_URI
            contentResolver.query(uri, null, null, null, null)?.let { cursor->
                if(cursor.count > 0) {
                    cursor.moveToFirst()
                    do {
                        val channel = Channel.fromCursor(cursor)
                    } while (cursor.moveToNext() && cursor.isLast.not())
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2018-08-02
      • 1970-01-01
      • 2011-07-26
      • 2012-07-01
      • 2011-07-05
      相关资源
      最近更新 更多