在 AndroidTv 上加载 EPG 节目,where-clause/selection-filter

Loading EPG programs on AndroidTv, with a where-clause/selection-filter

当通过 ContentResolver 获取带有选择变量的频道节目时,我遇到了一个问题,恰恰是造成混乱的原因。

我得到以下异常:

java.lang.SecurityException: Selection not allowed for content://android.media.tv/program?channel=5

我可以毫无问题地获取一个频道的所有节目,但是当我将选择(where 子句)添加到查询方法时,我得到了上述安全异常,无论选择字符串如何,即使是在 1 =1:

Cursor cursor = resolver.query(programsUri, null, "1 = 1", null, null);

我觉得这真的很奇怪,因为我在获取频道的所有节目时没有问题:

Cursor cursor = resolver.query(programsUri, null, null, null, null);

一位同事告诉我,这是因为我的应用程序不是我正在开发的设备上的系统应用程序,但我再次发现这很奇怪,因为我可以在没有选择的情况下获取所有程序- 属性,那么为什么它需要额外的权限才能执行 where 子句? 真的希望有人能帮助我,因为最好不要被迫获取所有程序并自己进行选择过滤,而是使用提供的选择-属性..提前致谢:-)

OBS:频道 (?channel=5) 是由应用创建的,而不是第三方电视输入频道。

我找到问题了...

问题是我要过滤频道节目的应用程序是第三方应用程序。这意味着,android 不允许该应用程序进行选择参数,以防止 android 第三方应用程序在 android 中进行注入,这是有道理的。

然后需要在构建方法之一中定义以我们想要的方式过滤的方式TvContract.buildProgramUriXXX()。就我而言,我可以使用 buildProgramsUriForChannel(Uri channelUri, long startTime, long endTime).

据我所知,如果构建方法不适用于所需的过滤逻辑,我们需要在获取频道的所有节目后"manually"执行此操作。当然除非该应用程序是系统应用程序,因此我们可以使用选择参数。