Прежде всего, я знаю, что на этот вопрос задавали и отвечали много раз. Я не буду делать репосты, если бы какое-то из этих решений сработало для меня.
У меня есть 10 видов деятельности, которые я создаю и на которые переключаюсь, прежде чем перейти к
запускает будильник.
Затем я создаю alarmManager из последнего действия (с которым взаимодействует пользователь) со следующим кодом:
nextButton.setOnClickListener(new Button.OnClickListener(){
@Override
//Code adapted from example at android-er.blogspot.com
public void onClick(View arg0) {
//Declare the intent to start a new service
Intent myIntent = new Intent(Page10.this, AlarmService.class);
pendingIntent = PendingIntent.getService(Page10.this, 0, myIntent, 0);
//Create the alarm manager and connect it to ALARM_SERVICE
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
//Use the calendar to time the action of the alarm
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
//Set the alarm to buzz after the time defined in calendar
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
Toast.makeText(Page10.this, "Start Alarm", Toast.LENGTH_LONG).show();
//Start the main activity, the alarm service is now running in the background
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
После создания будильника я переключаюсь на основное действие, так как хочу, чтобы будильник работал в фоновом режиме. PendingIntent, передаваемый в alarmManager, является следующей службой:
public class AlarmService extends Service {
@Override
public void onCreate() {
//Get a notification manager
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager SlugNotificationManager = (NotificationManager) getSystemService(ns);
//Instantiate the notification
int icon = R.drawable.slugmoodtextless;
CharSequence tickerText = "Survey Ready";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
//Set notification messages and PendingIntent
Context context = getApplicationContext();
CharSequence contentTitle = "Slugmood";
CharSequence contentText = "Survey Ready!";
Intent notificationIntent = new Intent(this, Page1.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
//Pass notification to notification manager
final int HELLO_ID = 1;
SlugNotificationManager.notify(HELLO_ID, notification);
Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();
}
Я не включил другие переопределенные методы, для краткости и так как они не используются моим сервисом. Поэтому я хочу, чтобы моя служба отправляла уведомление в строку состояния при срабатывании будильника, а затем пользователь может щелкнуть уведомление, чтобы вернуться на страницу 1 (второе действие, которое создается). Все работает, пока пользователь не нажмет на уведомление. Затем происходит сбой программы с неописательным «непредвиденным сбоем программы» и возвращает меня на страницу до страницы 10 (а не страницы 1, где я установил pendingIntent).
Теперь я просто хотел, чтобы служба немедленно начала действие page1. Использование системы уведомлений было моим решением точно такого же сбоя, который произошел, когда я просто запустил действие page1 из сервиса.
Решения, которые я попробовал:
-Установите все виды флагов для намерения, включая CLEAR_TASK, CLEAR_TOP, REORDER_ACTIVITY и т. Д.
-Пробовал обязательно завершить () все действия, прежде чем пытаться перезапустить их из действия
-Попробовал поставить код для отправки уведомления в разные места в сервисе (onCreate, onStart и т. Д.)
-Пробовал возобновить деятельность, а не перезапускать ее.
- А также почти все остальное, упомянутое в StackOverflow о запуске операций из служб, использовании строки состояния и т. Д.
Так что я в тупике. Если кто-нибудь знает, как с этим справиться, я был бы очень признателен за помощь.
Редактировать: Вот полная трассировка стека:
11-01 04:58:21.111: ERROR/Zygote(32): setreuid() failed. errno: 2
11-01 04:58:28.332: ERROR/Zygote(32): setreuid() failed. errno: 17
11-01 04:58:29.412: ERROR/BatteryService(58): usbOnlinePath not found
11-01 04:58:29.412: ERROR/BatteryService(58): batteryVoltagePath not found
11-01 04:58:29.412: ERROR/BatteryService(58): batteryTemperaturePath not found
11-01 04:58:29.431: ERROR/SurfaceFlinger(58): Couldn't open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake
11-01 04:58:35.131: ERROR/EventHub(58): could not get driver version for /dev/input/mouse0, Not a typewriter
11-01 04:58:35.131: ERROR/EventHub(58): could not get driver version for /dev/input/mice, Not a typewriter
11-01 04:58:35.382: ERROR/System(58): Failure starting core service
11-01 04:58:35.382: ERROR/System(58): java.lang.SecurityException
11-01 04:58:35.382: ERROR/System(58): at android.os.BinderProxy.transact(Native Method)
11-01 04:58:35.382: ERROR/System(58): at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146)
11-01 04:58:35.382: ERROR/System(58): at android.os.ServiceManager.addService(ServiceManager.java:72)
11-01 04:58:35.382: ERROR/System(58): at com.android.server.ServerThread.run(SystemServer.java:184)
11-01 04:58:36.081: ERROR/SoundPool(58): error loading /system/media/audio/ui/Effect_Tick.ogg
11-01 04:58:36.081: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressStandard.ogg
11-01 04:58:36.081: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressSpacebar.ogg
11-01 04:58:36.091: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressDelete.ogg
11-01 04:58:36.091: ERROR/SoundPool(58): error loading /system/media/audio/ui/KeypressReturn.ogg
11-01 04:58:37.572: ERROR/ThrottleService(58): Could not open GPS configuration file /etc/gps.conf
11-01 04:58:38.641: ERROR/logwrapper(147): executing /system/bin/tc failed: No such file or directory
11-01 04:58:38.691: ERROR/logwrapper(148): executing /system/bin/tc failed: No such file or directory
11-01 04:58:38.702: ERROR/logwrapper(149): executing /system/bin/tc failed: No such file or directory
11-01 04:58:46.651: ERROR/HierarchicalStateMachine(58): TetherMaster - unhandledMessage: msg.what=3
11-01 05:00:22.672: ERROR/AndroidRuntime(274): FATAL EXCEPTION: main
11-01 05:00:22.672: ERROR/AndroidRuntime(274): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.scrumptious.slugmood/org.scrumptious.slugmood.Page1}: java.lang.NullPointerException
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at android.os.Handler.dispatchMessage(Handler.java:99)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at android.os.Looper.loop(Looper.java:123)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at java.lang.reflect.Method.invokeNative(Native Method)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at java.lang.reflect.Method.invoke(Method.java:521)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at dalvik.system.NativeStart.main(Native Method)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): Caused by: java.lang.NullPointerException
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at org.scrumptious.slugmood.Page1.onCreate(Page1.java:36)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-01 05:00:22.672: ERROR/AndroidRuntime(274): ... 11 more
11-01 05:05:15.972: ERROR/AndroidRuntime(286): FATAL EXCEPTION: main
11-01 05:05:15.972: ERROR/AndroidRuntime(286): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.scrumptious.slugmood/org.scrumptious.slugmood.Page1}: java.lang.NullPointerException
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at android.os.Handler.dispatchMessage(Handler.java:99)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at android.os.Looper.loop(Looper.java:123)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at java.lang.reflect.Method.invokeNative(Native Method)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at java.lang.reflect.Method.invoke(Method.java:521)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at dalvik.system.NativeStart.main(Native Method)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): Caused by: java.lang.NullPointerException
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at org.scrumptious.slugmood.Page1.onCreate(Page1.java:36)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-01 05:05:15.972: ERROR/AndroidRuntime(286): ... 11 more
Я все еще не совсем уверен, в чем заключается моя проблема, хотя, похоже, что Android не может найти страницу 1.