我試圖在服務和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