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 のサードパーティ アプリによる SQL インジェクションを防ぐために、アプリが選択引数を作成することを Android が許可していないことを意味します。これは理にかなっています。

必要な方法でフィルタリングする方法は、ビルド メソッドの 1 つで定義する必要がありますTvContract.buildProgramUriXXX()。私の場合、使用できますbuildProgramsUriForChannel(Uri channelUri, long startTime, long endTime)

私の知る限り、必要なフィルタリング ロジックでビルド メソッドを使用できない場合は、チャネルのすべてのプログラムを取得した後、「手動で」実行する必要があります。もちろん、アプリがシステム アプリでない限り、 selection-argument を使用するためのアクセス。

于 2016-12-06T12:54:54.147 に答える