在Android TV上的Lollipop中创建推荐(或通知)时,我无法让它自动取消。
我正在使用" NotificationCompat.BigPictureStyle"正如Android TV开发者页面中所推荐的那样。通知按设计工作,按预期触发PendingIntent,但不会自动取消并从推荐栏中消失。建议的第二个选择会显示一个空白屏幕,因此我猜PendingIntent在此时为空。 (ADB在第二次调用时显示android.content.IntentSender $ SendIntentException。)
在Nexus播放器和Android TV模拟器上测试。
private void buildAndroidTVRecommendation(String name, PendingIntent pIntent,
Context context2, Bundle extras) {
NotificationManager mNotificationManager = (NotificationManager)
context2.getSystemService(Context.NOTIFICATION_SERVICE);
Bitmap smallBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.air_share);
Notification notification = new NotificationCompat.BigPictureStyle(
( new NotificationCompat.Builder(context)
.setContentTitle("Air-Share - incoming share")
.setContentText("From: "+name)
.setContentInfo("Air-Share"))
.setGroup("Air-Share")
.setColor(0xFFFF2020)
.setCategory(Notification.CATEGORY_RECOMMENDATION)
.setLargeIcon(smallBitmap)
.setSmallIcon(R.drawable.air_share)
.setContentIntent(pIntent)
.setExtras(extras)
.setAutoCancel(true)
)
.build();
mNotificationManager.notify(pendingCounter, notification);
mNotificationManager = null;
}
答案 0 :(得分:0)
为了达到这个目的,我已经创造了一个解决这个问题的方法。
我创建了一个新活动,其唯一目的是从建议书中接收待定意图。 我改变了建议的原始Pending Intent来调用这个新活动而不是我想要的活动。 (所需的活动在我的应用程序之外。)在Extras中,我将我需要知道的所有内容捆绑到我原来想要的意图以及通知ID。 当新活动启动时(在用户点击推荐之后),我提取ID并取消推荐。然后我提取所需意图的信息,创建意图并最终完成活动。
public class TVRecommendationActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent in = (Intent) getIntent();
String jsonString = in.getStringExtra("jsonString");
String fileUri = in.getStringExtra("fileUri");
int id =in.getIntExtra("notificationID", -1);
NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
if (id >= 0 ) nm.cancel(id);
JSONIntent newIntent = new JSONIntent(getApplicationContext());
newIntent.setIncomingLocalFileURI(fileUri);
Intent out = newIntent.buildIntentFromJSON(jsonString, fileUri);
if (out != null) startActivity(out);
finish();
}
}