昨日以来、私はAndroid 4.2で問題を抱えています。プッシュ通知を受け取ると、振動するように設定していなくても、許可が必要です
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によって発生します
2つの異なるアプリでこの問題が発生し、コードを変更することはありません
これは、通知振動ポリシーの変更によるAndroid 4.2のバグでした。権限のバグは、4.2.1の この変更 で修正されました。
Jelly Bean 4.1.2でも同じ例外が発生しましたその後、これを解決するために行った変更に従います
1.マニフェストファイルに権限を追加しました。
<uses-permission
Android:name="Android.permission.VIBRATE"></uses-permission>
2.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以下の任意の値を設定して同じ効果を得ることができますが、それは厄介です。