2

在 Android TV 上的 Lollipop 中创建推荐(或通知)时,我无法将其设置为自动取消。

我正在使用 Android TV 开发者页面中推荐的“NotificationCompat.BigPictureStyle”。通知按设计工作,按预期触发 PendingIntent,但不会自动取消并从推荐栏中消失。第二次选择推荐会出现一个空白屏幕,所以我猜当时 PendingIntent 为空。(ADB 在第二次调用时显示 android.content.IntentSender$SendIntentException。)

在 Nexus Player 和 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;


}
4

1 回答 1

0

对于它的价值,我已经创建了一个解决方法来解决这个问题。

我创建了一个新 Activity,其唯一目的是接收来自 Recommendation 的 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();
    }

}
于 2015-01-09T13:04:19.103 回答