2016-12-05 52 views
0

我有一個問題,適當地只是造成混亂的,取通過ContentResolver的程序時用於信道,具有一個選擇變量..加載EPG節目,具有where子句/選擇濾波器

我出現以下情況例外:

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:頻道(?頻道= 5)由應用創建,而不是第三方電視輸入頻道。

回答

0

我想通了這個問題...

的問題是,我的應用程序,它要對頻道節目進行過濾是一個第三方應用程序。這意味着,Android不允許應用程序進行選擇參數,以防止Android中的第三方應用程序進行SQL注入,這很有意義。

以我們想要的方式進行過濾的方式需要在構建方法TvContract.buildProgramUriXXX()之一中定義。在我的情況下,我可以使用buildProgramsUriForChannel(Uri channelUri, long startTime, long endTime)

據我所知,如果構建方法不適用於所需的過濾邏輯,我們需要在獲取該通道的所有程序後「手動」執行此操作。除非該應用程序是系統應用程序,因此我們有權使用選擇參數。