java.lang.NoSuchMethodError:android.app.PendingIntent.getActivity

Jes*_*erB 3 android android-intent android-notifications

突然间,我开始收到相当多的崩溃报告,声称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)
Run Code Online (Sandbox Code Playgroud)

以下是我的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() );
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:正如Tushar指出的那样,我已经开始PendingIntent.getActivity()Bundle参数中使用该方法.这个方法首先在API 16中引入,它导致所有具有早期API的设备崩溃.

我的解决方案是调用contentIntent.replaceExtras( extras )并传递内容Intent中的额外内容,而不是直接传递给getActivity()方法.

Tus*_*har 5

getActivity(Context context, int requestCode, Intent intent, int flags, Bundle options)
Run Code Online (Sandbox Code Playgroud)

仅在Android API 16(4.1)中引入.如果你在下面的任何东西上运行你的应用程序,它将抛出此异常.

您可能希望使用getActivity()API 1引入的版本,该版本具有签名(通知缺少Bundle):

getActivity(Context context, int requestCode, Intent intent, int flags)
Run Code Online (Sandbox Code Playgroud)

资源

  • 该死的,我怎么能错过这个?:-)我会尽快接受你的回答 (2认同)