0
반환 : 내가 추가하고 프로그램을 삭제할 수 있습니다쿼리 보안 예외
java.lang.SecurityException: Selection not allowed for content://android.media.tv/program
at android.os.Parcel.readException(Parcel.java:1683)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
at android.content.ContentResolver.query(ContentResolver.java:530)
at android.content.ContentResolver.query(ContentResolver.java:472)
주, 그래서 나는 생각한다 사용 권한이 매니페스트 파일에 올바르게 설정되어 있어야합니다.
다음 샘플 코드는 프로그램 제목으로 쿼리하려고하지만 위의 예외가 throw됩니다.
Uri uri = TvContract.Programs.CONTENT_URI;
Cursor cursor = null;
try {
String mSelectionClause = TvContract.Programs.COLUMN_TITLE + " = ?";
String[] mSelectionArgs = { "Test title" };
cursor = resolver.query(uri, Program.PROJECTION, mSelectionClause, mSelectionArgs, null);
if (cursor == null || cursor.getCount() == 0) {
Log.d(TAG, "No programs found for 'Test title'");
return programs;
}
Log.d(TAG, cursor.getCount() + " programs found for 'Test tilte'");
} catch (Exception e) {
Log.w(TAG, "Unable to get programs for 'Test title'", e);
} finally {
if (cursor != null) {
cursor.close();
}
}
어떤 열로도 쿼리 할 수 있습니까?
내가 볼 당신이 제공 한 링크에있는 문서는 "조항이 허용되지 않습니다 WHERE"고 언급하고있다. 왜 그래? 그것은 매우 제한적입니다. 특정 프로그램에 액세스하려고 할 때마다 모든 채널의 프로그램을 거치지 않으면 안됩니다! – vas
@vas 여러 앱이 Tv 공급자에 채널을 가질 수 있으므로 공급자는 각 앱을 자체 샌드 박스로 제한하려고 시도합니다. 특정 프로그램을 쿼리하려는 경우 제목이 아닌 식별자로 쿼리해야합니다. 타이틀은 다른 언어로 번역 될 수 있으며 훌륭한 키를 만들지 않습니다. 이것이 TV 공급자가 ID로만 쿼리를 허용하는 이유 중 하나입니다. 쿼리에 프로젝션을 설정하여 결과에 모든 메타 데이터가 다시 나타나지 않도록 할 수 있습니다. 제목이 열쇠 인 특별한 용도는 무엇입니까? 나는 더 잘 이해하기에 호기심이 많다. – Benjamin