Подтвердить что ты не робот

Java.lang.SecurityException: требуется разрешение VIBRATE на желе Bean 4.2

Со вчерашнего дня у меня проблема на Android 4.2, когда я получаю push-уведомления, для этого требуется разрешение, даже если я не настроил его на вибрацию

Notification notification = new Notification(icon, notificationItem.message, when);
notification.setLatestEventInfo(context, "App", notificationItem.message,
            PendingIntent.getActivity(context, 0, intent, 0));
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.defaults |= Notification.DEFAULT_SOUND;

NotificationManager nm =
            (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(notificationItem.notificationID, notification);

исключение выражается nm.notify

У меня эта проблема в двух разных приложениях, и я никогда не изменяю код

4b9b3361

Ответ 1

Это была ошибка в Android 4.2 из-за изменения политики вибрации уведомлений; ошибка исправления была исправлена ​​это изменение в 4.2.1.

Ответ 2

Я получил то же Исключение в желе Bean 4.1.2, , затем следующие изменения, которые я сделал для решения этой

1.Данное разрешение в файле манифеста.

 <uses-permission
 android:name="android.permission.VIBRATE"></uses-permission>

2.Notification Composing покрывается Try-Catch

 try
    {
        mNotificationManager = (NotificationManager)          
        this.getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                        this)
                .setSmallIcon(R.drawable.ic_notif_alert)
                .setContentTitle(getResources().getString(R.string.app_name))
                .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
                .setContentText(msg)
                .setStyle(bigTextStyle)
                .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);
            mBuilder.setAutoCancel(true);
            mBuilder.setContentIntent(contentIntent);
            mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
            Log.d(TAG, "---- Notification Composed ----");
    }
    catch(SecurityException se)
    {
        se.printStackTrace();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

Ответ 3

Так как эта ошибка возникает только на Android 4.2 и 4.3, вы можете использовать ее в качестве обходного пути (например, включить maxSdkVersion):

<uses-permission android:name="android.permission.VIBRATE" android:maxSdkVersion="18"/>

Примечание. Атрибут maxSdkVersion был добавлен только в API 19, который в этом случае, к счастью, является именно тем минимумом, который мы хотим! Теоретически мы могли бы поставить любое значение <= 18, чтобы получить тот же эффект, но это было бы неприятно.