0

当通过 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) 由应用程序创建,而不是第三方电视输入频道。

4

1 回答 1

0

我解决了这个问题...

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

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

据我所知,如果构建方法不适用于所需的过滤逻辑,我们需要在获取频道的所有程序后“手动”执行。除非该应用程序是系统应用程序,因此我们有访问使用选择参数。

于 2016-12-06T12:54:54.147 回答