java.lang.IllegalArgumentException: contentIntent

2019-07-29 03:05发布

问题:

The full error also contains:

    android.app.RemoteServiceException: Bad notification for startForeground:

I've read other similar posts here, tried their suggestions and read their links, but a small number of users are still reporting this error.

Overview

An activity is started by an external application. This activity starts a custom speech recognition service. It does not use startForeground:

    this.startService(intent);

The activity then calls finish();

The service starts the custom speech recognition class and passes context to it in a constructor. On 'beginning of speech detected' I display the following notification:

    String notTitle = "Hello";
    String notificationText = "hello there";

    notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    myNotification = new Notification(
                android.R.drawable.ic_btn_speak_now, notTitle,
                System.currentTimeMillis());
    myNotification.flags |= Notification.FLAG_AUTO_CANCEL;

    Intent intent = new Intent();
    intent.setAction("com.android.settings.TTS_SETTINGS");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
        myNotification.contentIntent = pendingIntent;

    myNotification.setLatestEventInfo(mContext, notTitle,
                notificationText, pendingIntent);

    notificationManager.notify(MY_NOTIFICATION_ID, myNotification);

The notification has no requirement to do anything 'onClick' as it's cancelled as soon as the user stops talking. I was originally passing a 'null intent', however, after reading many posts, I added in the random intent/pendingIntent of displaying TTS Settings, just to rule this out as the problem.

99% of my users don't have an issue with either the above code or passing a null intent. I need to solve this for the 1% though, as it's a very important part of my application.

Any suggestions would be very much appreciated.

回答1:

In my case the Logcat debug was eloquent: " android.app.RemoteServiceException: Bad notification for startForeground:" Second line read: PendingIntent null!

In Android 4.x having a null PendingIntent is not a problem for starting foreground services, however in earlier Android versions it is.

So first of all check the debug log carefully (read all the lines and why not, post them here). If it is the same problem in your code I would check that the pendingIntent is not null. This could perhaps happen if mContext is null!

Have a look on the documentation for the setLatestEventInfo.

Here is how your code should look (if you are pushing these notifications from a service):

        // The PendingIntent to launch our activity if the user selects this notification
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            new Intent(this, LocalServiceActivities.Controller.class), 0);

    // Set the info for the views that show in the notification panel.
    notification.setLatestEventInfo(this, getText(R.string.local_service_label),
                   text, contentIntent);

Code was quoted from Android official documentation.

Also see this for a similar issue on StackOverflow.