NotificationCompat v7 не работает на Oreo и более поздних версиях ОС - PullRequest
1 голос
/ 24 июня 2019

У меня проблемы с NotificationCompat v7 на android 8,9.Что является лучшим способом показать уведомление на всех версиях Android

журнал отладки

android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null pri=0 contentView=null vibrate=null sound=null tick defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE)

MinSDK = 18, TargetSDK = 28, версия плагина Android Gradle = 3.4.1, версия gradle = 5.1.1

как решить эту проблему, есть ли хорошее решение для этого ??

Мой файл gradle

dependencies {
    implementation "com.android.support:support-core-utils:28.0.0"
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:2.0.0-alpha5'
    testImplementation 'junit:junit:4.13-beta-2'
   'com.android.support.test:runner:1.0.2'
    implementation "com.android.support:support-core-utils:28.0.0"
    implementation 'com.google.code.gson:gson:2.8.5'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:support-compat:28.0.0'
}





 @Override
        public void onCreate() {
            super.onCreate();
            wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            hotspotControl = HotspotControl.getInstance(getApplicationContext());
            m_notificationStopActionReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    if (null != intent && WIFI_AP_ACTION_STOP.equals(intent.getAction()))
                        disableHotspotAndStop();
                }
            };
            registerReceiver(m_notificationStopActionReceiver, new IntentFilter(WIFI_AP_ACTION_STOP));
            //Start a foreground with message saying 'Initiating Hotspot'. Message is later updated using SHARE_SERVICE_NOTIFICATION_ID
            startForeground(SHARE_SERVICE_NOTIFICATION_ID, getNotification(getString(R.string.p2p_sender_service_init_notification_header), false));
            hotspotCheckHandler = new HotspotChecker(this);
        }

        protected android.support.v4.app.NotificationCompat.Action getStopAction() {
            Intent intent = new Intent(WIFI_AP_ACTION_STOP);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            return new android.support.v4.app.NotificationCompat.Action.Builder(android.R.drawable.ic_menu_close_clear_cancel, "Stop", pendingIntent).build();
        }

1 Ответ

0 голосов
/ 24 июня 2019

Вам необходимо использовать канал уведомлений для отображения уведомлений на устройстве Android 8.0+.

Вы можете использовать приведенный ниже код для генерации уведомлений с помощью метода getShareThemNotification(...).

    NotificationManager notificationManager = (NotificationManager)
            context.getSystemService(Context.NOTIFICATION_SERVICE);

    Notification notification;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

        NotificationChannel notificationChannel = new NotificationChannel("channel_id",
                "Channel Name", NotificationManager.IMPORTANCE_HIGH);
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.GREEN);
        notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
        notificationManager.createNotificationChannel(notificationChannel);

        Notification.Builder builder = new Notification.Builder(context, "channel_id");
        notification = builder.setContentTitle({"Title"})
                .setContentText({"Message"})
                .setAutoCancel(true)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentIntent(pendingIntent).build();
    } else {
        Notification.Builder builder = new Notification.Builder(context);
        notification = builder.setContentTitle({"Title"})
                .setContentText({"Message"})
                .setAutoCancel(true) 
                .setSmallIcon(R.drawable.ic_notification)
                .setContentIntent(pendingIntent).build();
    }
    notificationManager.notify(id, notification);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...