Wenn ich versuche, durch irgendetwas die Programme Datenbank abzufragen andere als Kanal oder Programm-ID ich die folgende Ausnahme erhalten:Abfrage für Programme Gibt Sicherheitsausnahme
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)
Bitte beachte, dass ich hinzufügen und Programme löschen, so dass ich denke, Berechtigungen sind in der Manifestdatei korrekt festgelegt.
Der folgende Beispielcode versucht, nach Programmtitel abzufragen, aber die obige Ausnahme wird ausgelöst.
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();
}
}
Ist es nicht möglich, nach einer Spalte abzufragen?
Ich sehe, dass der Artikel in dem Link zur Verfügung gestellt wird erwähnt, dass "WHERE-Klauseln sind nicht erlaubt". Warum ist das so? Es ist sehr restriktiv. Die Programme jedes Kanals jedes Mal durchlaufen zu müssen, wenn Sie auf ein bestimmtes Programm zugreifen möchten, ist sehr langsam! – vas
@vas Da mehrere Apps Kanäle im Tv-Provider haben können, versucht der Anbieter, jede App auf die eigene Sandbox von Daten zu beschränken. Im Idealfall, wenn Sie ein bestimmtes Programm abfragen möchten, sollten Sie nach einem Bezeichner und nicht nach einem Titel suchen. Titel können in verschiedene Sprachen übersetzt werden und bilden keine großartigen Schlüssel. Dies ist ein Grund, warum der Tv-Provider nur Abfragen nach ID erlaubt. Sie können eine Projektion für Ihre Abfrage festlegen, damit nicht alle Metadaten in den Ergebnissen angezeigt werden. Was ist Ihr besonderer Anwendungsfall, in dem der Titel der Schlüssel ist? Ich bin neugierig, es besser zu verstehen. – Benjamin