Android O通知対応


前言:Android O(Android 8.0)から、Googleは通知チャネルの概念を導入した.
通知ルートとは何ですか?その名の通り、通知ごとに対応するルートに属します.各Appは、現在のAppがどのような通知チャネルを持っているかを自由に作成できますが、これらの通知チャネルの制御権はユーザーの手に握られています.ユーザは、これらの通知チャネルの重要度、ベルが鳴るかどうか、振動するかどうか、またはこのチャネルを閉じるかどうかの通知を自由に選択することができる.
各アプリにとって、通知ルートの区分は非常に慎重に検討する必要があります.通知チャネルは作成されると変更できないため、開発者は自分のアプリにどのような種類の通知があるかをよく分析し、対応する通知チャネルを作成する必要があります.
必ず似合うかどうか?targetSdkValersonを26以上に指定した場合は、適合する必要があります.
どうやって似合いますか?ここで非常に重要な概念の一つは、通知チャネルです.【前言】では、通知チャネルについて説明しましたが、どのようにして通知チャネルを作成しますか?通知チャネルを作成するには、少なくともチャネルID、チャネル名、および重要レベルの3つのパラメータが必要です.チャネルIDは、グローバル一意性が保証されている限り、任意に定義できます.チャネル名はユーザに見せるものであり,このチャネルの用途を明確に表現できる必要がある.重要レベルの違いは通知の異なる行為を決定します.もちろん、ここでは初期状態の重要レベルにすぎません.ユーザーはいつでも手動でチャネルの重要レベルを変更することができます.Appは介入できません.
ここで注意するのは2つです.1、通知チャネル機能はAndroid O以上にあるので、まずシステムバージョンをチェックする必要があります.2、通知チャネルを作成するコードは、最初の実行時にのみ作成され、以降、実行するたびに通知チャネルが存在していることが検出されるため、繰り返し作成することはなく、効率にも影響しません.
次に、コードを直接使用して、適切な方法を説明します.
    private void sendOrderNotificationWithAction(String orderId) {
        Intent mainIntent = new Intent();
        mainIntent.setClass(this, OrderManagementActivity.class);
        mainIntent.putExtra("orderId", orderId);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mainIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification;
        if (Build.VERSION.SDK_INT >= 26) {
            String channelId = "order";
            String channelName = "    ";
            int importance = NotificationManager.IMPORTANCE_HIGH;
            createNotificationChannel(channelId, channelName, importance, notificationManager);
            notification = new Notification.Builder(this, channelId)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentText("         ,    ")
                    .setAutoCancel(true)
                    .setContentIntent(pendingIntent)
                    .build();
        } else {
            notification = new Notification.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentText("         ,    ")
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setAutoCancel(true)
                    .setContentIntent(pendingIntent)
                    .build();
        }
        notificationManager.notify(0, notification);
    }

    @TargetApi(26)
    private void createNotificationChannel(String channelId, String channelName, int importance, NotificationManager notificationManager) {
        NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, importance);
        notificationManager.createNotificationChannel(notificationChannel);
    }