Ответ 1
Это была ошибка в Android 4.2 из-за изменения политики вибрации уведомлений; ошибка исправления была исправлена это изменение в 4.2.1.
Со вчерашнего дня у меня проблема на 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
У меня эта проблема в двух разных приложениях, и я никогда не изменяю код
Это была ошибка в Android 4.2 из-за изменения политики вибрации уведомлений; ошибка исправления была исправлена это изменение в 4.2.1.
Я получил то же Исключение в желе 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();
}
Так как эта ошибка возникает только на Android 4.2 и 4.3, вы можете использовать ее в качестве обходного пути (например, включить maxSdkVersion):
<uses-permission android:name="android.permission.VIBRATE" android:maxSdkVersion="18"/>
Примечание. Атрибут maxSdkVersion был добавлен только в API 19, который в этом случае, к счастью, является именно тем минимумом, который мы хотим! Теоретически мы могли бы поставить любое значение <= 18, чтобы получить тот же эффект, но это было бы неприятно.