突然间,我开始收到很多崩溃报告,声称android.app.PendingIntent.getActivity方法不存在。
任何人都知道造成这种情况的原因是什么?
java.lang.NoSuchMethodError: android.app.PendingIntent.getActivity
at com.example.notification.NotificationHelper.showNotification(NotificationHelper.java:37)
at com.example.notification.NotificationHelper.showNotification(NotificationHelper.java:19)
at com.example.content.sync.userdata.TaskSynchronizer$2.onResultReceived(TaskSynchronizer.java:142)
at com.example.content.sync.BulkRequest.onResultReceived(BulkRequest.java:172)
at com.example.content.sync.SyncAdapterHelper.pushOrPull(SyncAdapterHelper.java:201)
at com.example.content.sync.SyncAdapterHelper.syncAll(SyncAdapterHelper.java:60)
at com.example.content.sync.SyncAdapter.onPerformSync(SyncAdapter.java:139)
at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:247)
以下是我的NotificationHelper
课程:
public class NotificationHelper {
public static void showNotification( Context context, String title, String content, MenuItem itemToStart ) {
showNotification(context, title, content, itemToStart, null, itemToStart.id );
}
public static void showNotification( Context context, String title, String content, MenuItem itemToStart, Bundle extras ) {
showNotification(context, title, content, itemToStart, extras, itemToStart.id );
}
public static void showNotification( Context context, String title, String content, MenuItem itemToStart, Bundle extras, int notificationId ) {
/*
* Check if user has disabled notifications
*/
if ( !ProfileManager.areNotificationsEnabled( context ) ) {
return;
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
Intent contentIntent = new Intent( context, LauncherActivity.class );
contentIntent.putExtra( MFMainActivity.EXTRA_START_MENUITEM_ID, itemToStart.id );
builder.setSmallIcon( R.drawable.ic_stat_notify )
.setAutoCancel( true )
.setContentTitle( title )
.setContentText( content )
.setContentIntent( PendingIntent.getActivity(context, 0, contentIntent, Intent.FLAG_ACTIVITY_NEW_TASK, extras ) );
NotificationManager nm = (NotificationManager) context.getSystemService( Context.NOTIFICATION_SERVICE );
nm.notify( notificationId, builder.build() );
}
}
更新:正如Tushar指出的那样,我已经开始使用PendingIntent.getActivity()
方法和Bundle
参数。这个方法首先在API 16中引入,导致所有具有早期API的设备崩溃。
我的解决方案是调用contentIntent.replaceExtras( extras )
并在内容Intent中传递额外内容,而不是直接传递给getActivity()
方法。
答案 0 :(得分:5)
getActivity(Context context, int requestCode, Intent intent, int flags, Bundle options)
仅在Android API 16(4.1)中引入。如果你在下面的任何东西上运行你的应用程序,它将抛出此异常。
您可能希望使用API 1引入的getActivity()
版本,该版本具有签名(通知缺少Bundle
):
getActivity(Context context, int requestCode, Intent intent, int flags)