我试图在服务和broadcastreceiver的帮助下,在特定时间开始一项活动。问题是,一旦时间到了,我的应用程序崩溃。从BroadcastReceiver开始从事服务活动
下面是延伸服务 假定一切正常,除了在代码中陈述的意图我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));
}
我认为它不工作的原因是因为我已经有一个意图过滤器来使手机振动。 不知道还有什么做或如何改变它。
什么,我试图做的是,创造一个闹钟,一旦时间打,我希望它开始响个不停,然后开始将显示贪睡的活动。
它现在振动的原因就是这样,每当我试图测试它时,它都不响。
任何提示和建议,将不胜感激。谢谢。
编辑:
我一直在使用该标志的活动新任务试过了,这是我的logcat:
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 [email protected]
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
EDIT2:
好了,所以经过一些研究,我想:
Intent mIntent = new Intent(getBaseContext(), GoTime.class);
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(mIntent);
这次,它工作。 谢谢你的所有时间!
我已经更新了我的职位与你的建议,与logcat的错误一起。 – nub
用新代码运行应用程序后,这是一个新的logcat吗? – codeMagic
是的,先生,这是添加i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)后新的logcat; 原因可能是这样的:“新的IntentFilter(”setVibrate“)”,我不能调用2接收onReceive? – nub