【问题标题】:Android Tv: get list of channelsAndroid TV:获取频道列表
【发布时间】:2015-04-25 02:13:52
【问题描述】:

我已经安装了 androidtv-sample-inputs,所以我可以伪造一些电视输入并拥有一些频道,并且我想获取有关这些频道的信息,但是,当我查询以获取该信息时,我得到一个空光标。

到目前为止我尝试过的是:

TvInputManager tv = (TvInputManager)getApplicationContext().getSystemService(Context.TV_INPUT_SERVICE);

    List<TvInputInfo> list = tv.getTvInputList();

    String[] projection =  {
            TvContract.Channels._ID,
            TvContract.Channels.COLUMN_DISPLAY_NUMBER
    };

    ContentResolver cr = getContentResolver();

    Iterator<TvInputInfo> it = list.iterator();
    while(it.hasNext()) {
        TvInputInfo aux = it.next();
        Uri uri = TvContract.buildChannelsUriForInput(aux.getId());

        Log.d("TAG", uri.toString());
        Log.d("TAG", aux.toString());

        Cursor cur = cr.query(uri, projection, null, null ,null);
        Log.d("TAG", cur.toString());

        if(cur.moveToFirst()) {
            Log.d("TAG", "not empty cursors");
        }

    }

我已经添加了使用权限,并且我检查了电视输入不是直通的。

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

【问题讨论】:

  • com.android.provierts.tv.permission.ACCES_ALL_EPG_DATA,'provierts' 是打算在那里吗?

标签: android android-tv


【解决方案1】:

你用的是什么权限?

如果您的应用程序不是 signatureOrSystem,则您只能通过对电视提供商的查询访问您的自己的频道和节目。您正在执行的所有查询都会根据您的包名称进行过滤。

我猜您可以从频道检索的信息仅限于可以从 TvInputInfo 访问的信息。

【讨论】:

  • 我已经尝试在我的清单中添加这个:
  • 我拼错了,它是 signatureOrSystem 而不是 systemOrSignature。具有这种保护级别的是 ACCESS_ALL_EPG_DATA。这意味着它只能由 Android 系统映像中的应用程序或使用与声明权限的应用程序相同的证书签名的应用程序使用。
  • 首先,“READ_EPG_DATA”和“ACCES_ALL_EPG_DATA”有什么区别。那么我如何读取不同电视输入提供的频道?如果我不能让我的应用程序成为 Android 系统,并且我不能使用与声明权限的应用程序相同的证书签署我的应用程序,我就无法获取该信息?我无法知道用户正在观看什么频道?
  • READ_EPG_DATA 和 WRITE_EPG_DATA 允许您访问来自频道和节目的数据,但仅限于您拥有的内容。 ACCESS_ALL_EPG_DATA 允许您访问所有内容。是的,TvProvider 目前阻止您获取所有频道:android.googlesource.com/platform/packages/providers/TvProvider/… -> params.setWhere(BaseTvColumns.COLUMN_PACKAGE_NAME + "=?", getCallingPackage_()); 始终被调用。
  • 遗憾的是,TvProdier 阻止人们获取所有频道。我已经看到索尼安卓电视不使用电视应用程序从电视输入显示直播电视。您是否知道他们是否会提供对频道列表或当前频道列表的访问权限?非常感谢您的帮助!
【解决方案2】:

除了清单文件中所需的“com.android.providers.tv.xxx”EPG 权限外,您还必须签署您的 .apk !否则,您将在设备上看到所有可用的 TvInput,但没有组成这些 tvInput 的通道(并且这个,没有返回任何错误 ;-))。 Android Studio 提供了这个功能('BUILD' 菜单项然后'Generate Signed APK')见How to sign an android apk file

【讨论】:

猜你喜欢
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 2023-01-26
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多