为什么我无法在 Android 电视提供商数据库中看到所有频道项目?

Why do I not get all Channel items visible in Android TV provider database?

首先,这是/data/data/com.android.providers.tv/databases/tv.db

然后在我的代码中我应用了 来检索频道:

TvInputManager tv = (TvInputManager)getApplicationContext().getSystemService(Context.TV_INPUT_SERVICE);
List<TvInputInfo> list = tv.getTvInputList();
ContentResolver cr = getContentResolver();
Iterator<TvInputInfo> it = list.iterator();
while(it.hasNext()) {
    TvInputInfo aux = it.next();
    Uri uri = TvContract.buildChannelsUriForInput(aux.getId());

    Cursor cur = cr.query(uri, projection, null, null ,null);
    cur.moveToFirst();

    do {
        val channel = Channel.fromCursor(channelCursor)
        Log.d("Log", "New channel ${channel.id} : ${channel.displayName} : ${channel.packageName}"}
    } while (channelCursor.moveToNext() && channelCursor.isLast.not())
}

不幸的是,我只 TvInputInfo aux 得到 input_id

com.google.android.videos/.tv.usecase.tvinput.playback.TvInputService

因此我的光标 returns 只有 1 个频道 _id = 4

尽管如此,我既没有得到亚马逊的 input_id 的 _id=22 也没有得到 netflix 的 _id=25,如上面的屏幕截图所示,我想得到上面的所有内容18 个频道。

如何查询所有个频道,以及那些input_id为空的频道?

您受到 TvContract.buildChannelsUriForInput(aux.getId()); 的限制,取决于 input_id。当你为 Uri 取 TvContractCompat.Channels.CONTENT_URI 时,你将得到:

Uri uri = TvContractCompat.Channels.CONTENT_URI;

Cursor cur = getContentResolver().query(uri, projection, null, null ,null);
cur.moveToFirst();

do {
    val channel = Channel.fromCursor(channelCursor)
    Log.d("Log", "New channel ${channel.id} : ${channel.displayName} : ${channel.packageName}"}
} while (channelCursor.moveToNext())