避免在 Android 8.0 的电视频道中创建重复频道

Avoid created duplicate channel in TV Channels from Android 8.0

我正在使用 Android 8.0 及更高版本的电视频道,

我可以通过下面的代码在电视频道上显示我的应用频道

private void createChannel(Context c) {
    // NOTE : THESE INFO MUST MATCH WITH DATA IN MANIFEST.XML
    ComponentName cn = new ComponentName(c, MainActivity.class.getName());
    String channelInputId = TvContractCompat.buildInputId(cn);

    // Design Channel Data on Launcher in here
    Channel channel = new Channel.Builder()
            .setDisplayName("Video Hot")
            .setType(TvContractCompat.Channels.TYPE_PREVIEW)
            .setInputId(channelInputId)
            .setAppLinkIntent(new Intent(c, MainActivity.class))
            .build();

    Uri channelUri = c.getContentResolver().insert(
            TvContractCompat.Channels.CONTENT_URI, channel.toContentValues());
    if (channelUri != null && !channelUri.equals(Uri.EMPTY)) {
        long channelId = ContentUris.parseId(channelUri);

        Bitmap bitmap = BitmapFactory.decodeResource(c.getResources(), R.mipmap.ic_channel_logo);
        ChannelLogoUtils.storeChannelLogo(c, channelId, bitmap);

        // Request to show on Default Channel
        TvContractCompat.requestChannelBrowsable(c, channelId);

        NotificationManager notificationManager = (NotificationManager)
                c.getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationChannel mNcChannelMedia = new NotificationChannel(
                channelId + "", c.getString(R.string.app_name), NotificationManager.IMPORTANCE_HIGH);

        notificationManager.createNotificationChannel(mNcChannelMedia);
    }
}

但我不知道哪种方法能够检查现有频道以避免重复问题,如下图所示

(清除数据应用设置后,再次打开应用,它是重复的)

认识的人,

请帮帮我,

谢谢,

关注this document

我现在可以找到答案。

@TargetApi(Build.VERSION_CODES.O)
private Subscription isExistedChannel(String channelName) {
    Subscription subscription;

    Cursor cursor =
            c.getContentResolver()
                    .query(
                            TvContractCompat.Channels.CONTENT_URI,
                            new String[] {
                                    TvContractCompat.Channels._ID,
                                    TvContract.Channels.COLUMN_DISPLAY_NAME
                            },
                            null,
                            null,
                            null);
    if (cursor != null && cursor.moveToFirst()) {
        do {
            Channel channel = Channel.fromCursor(cursor);
            if (channelName.equals(channel.getDisplayName())) {
                Log.d(
                        LogcatConstants.LIFE_CYCLE,
                        "Channel already exists. Returning channel "
                                + channel.getId()
                                + " from TV Provider.");

                subscription = new Subscription(channel.getId());

                return subscription;
            }
        } while (cursor.moveToNext());
    }

    return null;
}

private class Subscription {

    private long channelId;

    Subscription(long channelId) {
        this.channelId = channelId;
    }

    long getChannelId() {
        return channelId;
    }
}