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

避免在Android 8.0的电视频道中创建重复频道,android,android-tv,Android,Android Tv,我正在使用Android 8.0及以上版本的电视频道 我可以通过下面的代码在it电视频道上显示我的应用程序频道 private void createChannel(Context c) { // NOTE : THESE INFO MUST MATCH WITH DATA IN MANIFEST.XML ComponentName cn = new ComponentName(c, MainActivity.class.getName()); String channe

我正在使用Android 8.0及以上版本的电视频道

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

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);
    }
}
但我不知道哪种方法可以检查现有的通道,以避免重复问题,如下图所示

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

知道的人,

请帮帮我

谢谢,

请关注

我现在就可以找到答案

@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;
    }
}
跟随

我现在就可以找到答案

@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;
    }
}