2012-06-29 5 views
1

Полная ошибка также содержит:java.lang.IllegalArgumentException: contentIntent требуется

android.app.RemoteServiceException: Bad notification for startForeground: 

Я читал другие подобные сообщения here, попробовал свои предложения и читать их ссылку, но небольшое количество пользователей по-прежнему отчетности эта ошибка.

Обзор

Деятельность запускается внешним приложением. Это действие запускает пользовательскую службу распознавания речи. Это не использование startForeground:

this.startService(intent); 

Активность затем вызывает покрытие();

Служба запускает собственный класс распознавания речи и передает ему контекст в конструкторе. В «начале речи обнаружило» я показываю следующее уведомление:

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); 

Уведомления не имеет требования, чтобы сделать что-нибудь «OnClick», как он отменен, как только пользователь перестает говорить. Первоначально я проходил «нулевое намерение», но, прочитав много сообщений, я добавил в случайном намерении/pendingIntent отображение параметров TTS, чтобы это исключить как проблему.

99% моих пользователей не имеют проблемы ни с указанным выше кодом, ни с пустым намерением. Мне нужно решить это для 1%, хотя, поскольку это очень важная часть моего приложения.

Любые предложения были бы очень оценены.

ответ

3

В моем случае отладки Logcat был красноречив: «android.app.RemoteServiceException: Плохо уведомление для startForeground:» Вторая строка следующим образом: PendingIntent нулевой!

В Android 4.x с нулевым PendingIntent не проблема для запуска служб переднего плана, однако в ранних версиях Android это так.

Итак, прежде всего тщательно проверьте журнал отладки (прочитайте все строки и почему нет, разместите их здесь). Если это проблема в коде, я бы проверил, что pendingIntent не является нулевым. Это может произойти, если mContext is null!

Посмотрите на документацию для setLatestEventInfo.

Вот как ваш код должен выглядеть (если вы подталкиваете эти уведомления от службы):

 // 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); 

кодекса цитировали Android official documentation.

Также см. this для аналогичной проблемы в StackOverflow.

+0

Спасибо за ваш ответ. Проблема на самом деле оказалась внешней библиотекой, которую я использовал, поэтому нет «правильного» ответа.Если вы обновите свой ответ некоторыми ссылками на ожидающие намерения для тех, кто когда-либо читал этот вопрос, я буду отмечать его как правильное для полноты. Приветствия. – brandall

+0

Хорошо, я добавил несколько ссылок, последний - это еще одна ссылка аналогичной проблемы - я скопировал туда свой ответ: D. – Radu

+0

Спасибо, это полезно. Я отмечен как правильный. – brandall

Смежные вопросы