2015-02-26 2 views
0

Я пишу приложение, имеющее minSdkVersion = 9 и maxSdkVersion = 21. В service Я написал код для отправки уведомления, пользователь будет уведомлен, когда заданное время соответствует текущему времени.Отправка уведомления не работает

Однако, он уведомляет меня прекрасно, если я запустить его в эмуляторе, имеющий API = 19, но если я бегу в моем устройстве, имеющем API = 10 он не уведомляет меня и врезается приложение.

Я использую Android-Studio в Ubuntu, он не обеспечивает функцию отладки устройства. Поэтому я даже не вижу logcat.

Вот мой соответствующий код

@Override 
public int onStartCommand(Intent intent, int flags, int startId){ 

// Intent alarmIntent = new Intent(getBaseContext(), TRAlarmScreen.class); 
// alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
// alarmIntent.putExtras(intent); 
// getApplication().startActivity(alarmIntent); */ 

    Bundle extras = intent.getExtras(); 
    int id = extras.getInt("id"); 
    String title = extras.getString("title"); 
    String des = extras.getString("des"); 

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 
    mBuilder.setContentTitle(title); 
    mBuilder.setContentText(des); 
    mBuilder.setTicker("New Message Alert!"); 
    mBuilder.setSmallIcon(R.drawable.tr); 

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    notificationManager.notify(id, mBuilder.build()); 

    return START_STICKY; 
} 

В чем проблема? Нужно ли добавлять какую-либо библиотеку поддержки или что-то, чтобы она работала на более низких уровнях API?

Ошибка

java.lang.IllegalArgumentException: contentIntent требуется: упак = com.android.saathi ID = 1 уведомление = Уведомление (вибрирует = нуль, звук = нуль, по умолчанию = 0x0, флаги = 0x0)

logcat Мои во время работы в устройстве, имеющем апи 10

02-27 02:27:41.812 4760-4760/com.android.saathi E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start service [email protected] with Intent { flg=0x4 cmp=com.android.saathi/.TRService (has extras) }: java.lang.IllegalArgumentException: contentIntent required: pkg=com.android.saathi id=1 notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x0) 
     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2372) 
     at android.app.ActivityThread.access$2800(ActivityThread.java:132) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1111) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:150) 
     at android.app.ActivityThread.main(ActivityThread.java:4277) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:507) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.IllegalArgumentException: contentIntent required: pkg=com.android.saathi id=1 notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x0) 
     at android.os.Parcel.readException(Parcel.java:1326) 
     at android.os.Parcel.readException(Parcel.java:1276) 
     at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:394) 
     at android.app.NotificationManager.notify(NotificationManager.java:111) 
     at android.app.NotificationManager.notify(NotificationManager.java:91) 
     at com.android.saathi.TRService.onStartCommand(TRService.java:42) 
     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2355) 
     at android.app.ActivityThread.access$2800(ActivityThread.java:132) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1111) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:150) 
     at android.app.ActivityThread.main(ActivityThread.java:4277) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:507) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
     at dalvik.system.NativeStart.main(Native Method) 
+1

«не уведомлять меня и врезается приложение» - то посмотрите на трассировка стека Java в LogCat. «Я использую Android-Studio в Ubuntu, он не предоставляет функцию отладки устройства» - ** Я использую Android Studio в Ubuntu, и это, безусловно, ** делает ** «предоставляет функцию отладки устройства». – CommonsWare

+0

Вы используете опции разработчика? Запустите приложение на эмуляторе и откройте окно Logcat в своем идее –

+0

@CommonsWare в 'android sdk manager -> extras', в котором показано, что' google usb driver' 'не совместим с linux'. Поэтому я не могу работать непосредственно в устройстве. И сэр, если ubuntu позволяет отлаживать, не могли бы вы рассказать мне, как я могу это сделать? – user4583520

ответ

0

вызов setContentIntent() на ваш NotificationCompat.Builder, чтобы указать, что должно произойти, когда пользователь нажимает на Notification.

0

Я думаю, что у меня была такая же ошибка. вам нужно поставить PendingIntent в setContentIntent() (как то, что сказал выбранный ответ)

в вашем случае, как это:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 
    mBuilder.setContentTitle(title); 
    mBuilder.setContentText(des); 
    mBuilder.setTicker("New Message Alert!"); 
    mBuilder.setSmallIcon(R.drawable.tr); 

PendingIntent resultPendingIntent = 
      PendingIntent.getActivity(
        this, 
        0, 
        resultIntent, 
        PendingIntent.FLAG_UPDATE_CURRENT 
      ); 
    mBuilder.setContentIntent(resultPendingIntent); 


NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
notificationManager.notify(id, mBuilder.build()); 
Смежные вопросы