#android #service #alarmmanager #android-alarms
#Android #Обслуживание #alarmmanager #android-сигналы тревоги
Вопрос:
Я использую службу оповещения для запуска уведомлений. Я хочу иметь другое изображение в уведомлении, на основе которого PendingIntent его вызвал. Я попытался передать этот идентификатор через intent, но приложение вылетает
Intent myIntent = new Intent(AndroidAlarmService.this, MyAlarmService.class);
//pass something to intent
myIntent.putExtra("param", 999);
pendingIntent = PendingIntent.getService(AndroidAlarmService.this, 0, myIntent, 0);
И в классе обслуживания я улавливаю его через
int test = intent.getExtras().getInt("param", -1);
Toast.makeText(this, test, Toast.LENGTH_SHORT).show();//the app crashes here!
Однако приложение вылетает в отмеченной строке.
Как я должен передать идентификатор изображения в службу, чтобы я мог использовать этот идентификатор для установки изображения в норификации?
Редактировать
Вот лог-код при возникновении ошибки
09-29 12:04:45.087: ERROR/AndroidRuntime(12973): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start service com.exercise.AndroidAlarmService.MyAlarmService@2f9768a0 with Intent { flg=0x4 cmp=com.exercise.AndroidAlarmService/.MyAlarmService (has extras) }: android.content.res.Resources$NotFoundException: String resource ID #0x3e7
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3063)
at android.app.ActivityThread.access$3600(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x3e7
at android.content.res.Resources.getText(Resources.java:208)
at android.widget.Toast.makeText(Toast.java:258)
at com.exercise.AndroidAlarmService.MyAlarmService.onStart(MyAlarmService.java:53)
at android.app.Service.onStartCommand(Service.java:420)
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
... 10 more
Комментарии:
1. Происходит ли сбой в этой строке? Или он просто не компилируется …? Последнее имеет для меня больше смысла.
2. Он компилируется и генерирует ошибку во время выполнения. Я не говорю, что этот код окончательный, это всего лишь тестовый код, поскольку у меня нет идей, как передать идентификатор изображения в службу сигнализации.
3. вставьте logcat. также проверьте, каково значение test .
4. Значение test равно 999. В logcat указано, что значение не существует, но в режиме отладки я вижу, что тестовая переменная инициируется значением. Я передам logcat через минуту.
Ответ №1:
Toast.makeText(this, test, Toast.LENGTH_SHORT).show();//the app crashes here!
Означает, что вы отправляете int в качестве сообщения. Это, в свою очередь, означает, что вы говорите Android искать строку с идентификатором ресурса 999.
Измените его на:
Toast.makeText(this, String.valueOf(test), Toast.LENGTH_SHORT).show();//the app won't crash here
Комментарии:
1. Забавно! Я думаю, что Toast автоматически преобразует int в String :).