2011-12-13 106 views
0

我已經創建了一個啓動接收器來每5分鐘反覆調用一次喚醒的意圖服務,但無法弄清楚如何在安裝應用程序時立即啓動服務。我不想依賴用戶在開始運行之前重新啓動他們的設備!Android - 立即啓動報警服務?

這裏是我到目前爲止的代碼:

public class OnBootReceiver extends BroadcastReceiver { 
private static final int PERIOD = 300000; // check every 5 minutes 

@Override 
public void onReceive(Context context, Intent intent) { 
    AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, OnAlarmReceiver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 

    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60000, PERIOD, pi); 
}} 

誰能幫我請? :)

回答

1

如果您想在安裝應用程序時設置警報管理器來啓動您的服務,那麼這是不可能的。這是一個操作系統的限制,如果你願意的話。但是如果你想在應用程序啓動的時候啓動服務,只需調用它,它將繼續運行。

+0

感謝阿爾法,但我使用alarmmanager解決方案,以確保我的服務在待機(睡眠)模式下運行,而不使用局部喚醒鎖定,因爲這會消耗電池壽命。應用程序安裝真的沒有事件嗎? :/ – Mike

+0

請注意,有些設備會輸入一些名爲深度睡眠的東西,其中無論您使用何種方法,都不會喚醒。我的意思是,你只需要提交一個新的警報管理器時間表來啓動服務。 – AlfredoVR

0

本質上,由於應用程序對象是在應用程序啓動時以及接收到BOOT_COMPLETED Intent時創建的,因此可以在自定義應用程序類的onCreate方法中向AlarmManager註冊。請注意,每次進程啓動時都會實例化Application對象,其中包括臨時中止進程以節省資源的情況。但是,如果您不以任何方式更改PendingIntent,則一次又一次地註冊應該不成問題。

但是,安裝時無法啓動應用程序,必須首先進行某些用戶交互。

+0

如果應用程序沒有GUI,該怎麼辦?即,它只作爲服務運行,因此不允許用戶交互。 – user2768

+0

顯然,GUI是必需的:http://stackoverflow.com/a/15355945/3664487 – user2768