避免在 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);
}
}
但我不知道哪种方法能够检查现有频道以避免重复问题,如下图所示
(清除数据应用设置后,再次打开应用,它是重复的)
认识的人,
请帮帮我,
谢谢,
我现在可以找到答案。
@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;
}
}
我正在使用 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);
}
}
但我不知道哪种方法能够检查现有频道以避免重复问题,如下图所示
(清除数据应用设置后,再次打开应用,它是重复的)
认识的人,
请帮帮我,
谢谢,
我现在可以找到答案。
@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;
}
}