我试图在服务和广播接收器的帮助下在某个时间开始一项活动。问题是,一旦时间到了,我的应用程序就会崩溃。
这是我的扩展服务的 AlarmService 类假设除了代码中所述的意图之外,一切正常。
public void onCreate(){
audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
Intent i = new Intent(this, GoTime.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context c, Intent i) {
if(checkquery((currentTime < (startTime)))){
// RINGER is set to Vibrate.
audioManager.setRingerMode(1);
startActivity(i); //This crashes the app. If i take out this, everything works.
}
}
};
registerReceiver(myReceiver, new IntentFilter("setVibrate") );
alarmManager = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
}
我认为它不起作用的原因是因为我已经有一个意图过滤器来使手机振动。不知道还能做什么或如何改变它。
我想要做的是,创建一个闹钟,一旦时间到了,我希望它开始响起,然后开始一个显示贪睡的活动。
它现在振动的原因是每次我尝试测试它时它都不会响起。
任何提示和建议将不胜感激。谢谢你。
编辑:
我试过使用标志活动新任务,这是我的日志:
08-01 15:23:00.508: E/AndroidRuntime(2244): FATAL EXCEPTION: main
08-01 15:23:00.508: E/AndroidRuntime(2244): java.lang.RuntimeException: Error receiving broadcast Intent { act=setVibrate flg=0x14 (has extras) } in cs.AlarmManagerService$1@42093aa0
08-01 15:23:00.508: E/AndroidRuntime(2244): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:768)
08-01 15:23:00.508: E/AndroidRuntime(2244): at android.os.Handler.handleCallback(Handler.java:725)
08-01 15:23:00.508: E/AndroidRuntime(2244): at android.os.Handler.dispatchMessage(Handler.java:92)
08-01 15:23:00.508: E/AndroidRuntime(2244): at android.os.Looper.loop(Looper.java:137)
08-01 15:23:00.508: E/AndroidRuntime(2244): at android.app.ActivityThread.main(ActivityThread.java:5293)
08-01 15:23:00.508: E/AndroidRuntime(2244): at java.lang.reflect.Method.invokeNative(Native Method)
08-01 15:23:00.508: E/AndroidRuntime(2244): at java.lang.reflect.Method.invoke(Method.java:511)
08-01 15:23:00.508: E/AndroidRuntime(2244): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
08-01 15:23:00.508: E/AndroidRuntime(2244): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
08-01 15:23:00.508: E/AndroidRuntime(2244): at dalvik.system.NativeStart.main(Native Method)
08-01 15:23:00.508: E/AndroidRuntime(2244): Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
08-01 15:23:00.508: E/AndroidRuntime(2244): at android.app.ContextImpl.startActivity(ContextImpl.java:1235)
08-01 15:23:00.508: E/AndroidRuntime(2244): at android.app.ContextImpl.startActivity(ContextImpl.java:1222)
08-01 15:23:00.508: E/AndroidRuntime(2244): at android.content.ContextWrapper.startActivity(ContextWrapper.java:291)
08-01 15:23:00.508: E/AndroidRuntime(2244): at cs.AlarmManagerService$1.onReceive(AlarmManagerService.java:70)
08-01 15:23:00.508: E/AndroidRuntime(2244): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:758)
08-01 15:23:00.508: E/AndroidRuntime(2244): ... 9 more
编辑2:
好的,经过更多研究,我尝试了:
Intent mIntent = new Intent(getBaseContext(), GoTime.class);
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(mIntent);
这一次,它奏效了。谢谢你所有的时间!