2

Android TV の Lollipop でおすすめ (または通知) を作成すると、自動キャンセルできません。

Android TV 開発者ページで推奨されている「NotificationCompat.BigPictureStyle」を使用しています。通知は設計どおりに機能し、期待どおりに PendingIntent をトリガーしますが、自動キャンセルされず、推奨バーから消えません。推奨事項を 2 回目に選択すると空白の画面が表示されるので、その時点で PendingIntent は null になっていると思います。(ADB は、2 回目の呼び出しで android.content.IntentSender$SendIntentException を示します。)

Nexus Player と Android TV Emulator でテスト済み。

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

この問題を回避するための回避策を作成しました。

レコメンデーションから保留中のインテントを受け取ることを唯一の目的とする新しいアクティビティを作成しました。推奨の元の 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 に答える