2013-04-15 131 views
0

在我的應用程序中,我每隔一分鐘就從活動重新啓動服務。但如果應用程序被強制關閉,它將啓動服務。那個時候的活動狀態是什麼。如果強制關閉,重新啓動服務

這是我的代碼。

void toggleLogging(boolean isStart, int interval) 
{ 
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    PendingIntent loggerIntent = PendingIntent.getBroadcast(this, 0,new Intent(this,AlarmReceiver.class), 0);  
    long duration = interval * 60 * 1000; 
    manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
    SystemClock.elapsedRealtime(), duration, loggerIntent); 
    AppSettings.setServiceRunning(this, true); 
} 
+0

很確定的警報保持註冊,直到重新啓動。 – dcow

+0

即使應用程序強制關閉? – Manasi

+0

強制關閉應用程序也會清除警報,至少在4.1+上 - http://stackoverflow.com/a/14041439/206292 – Krishnaraj

回答

1

是報警登記,即使應用程序被強制關閉,因此沒有必要擔心

按照您的要求我添加的代碼

public class SampleActivity extends Activity{ 
    public static AlarmManager mAlarmManager; 
    public static PendingIntent mPintent; 
    public static Intent mIntent; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     Context context = getApplicationContext(); 
     SampleActivity.startAlarmManager(context); 
    } 

    public static void startAlarmManager(Context context){ 
     SampleActivity.mIntent = new Intent(context, YourService.class); 
     mAlarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     mPintent = PendingIntent.getService(context, 0, SampleActivity.mIntent, 0); 
     Calendar cal = Calendar.getInstance(); 
     mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 2000, mPintent); 
    } 
} 

然後在啓動完成啓動相同的報警在manifest資源配置文件

public class SampleBootComplete extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent arg1) { 
     SampleActivity.startAlarmManager(context); 
    } 

} 

註冊啓動完成接收器

<receiver android:name="com.sample.receiver.SampleBootComplete"> 
      <intent-filter > 
       <action android:name="android.intent.action.BOOT_COMPLETED"/> 
      </intent-filter> 
     </receiver> 
+2

但是它們在重新啓動時被清除。如果您希望繼續播放PendingIntent的內容,則需要請求在啓動完成時從系統接收ON_BOOT_COMPLETE意圖的權限,然後在收到意圖時再次註冊該警報。 – dcow

+0

是的,她正好處理引導完成接收器的事情,我同意你大衛,我接受你的回答 – Naga

+0

但當我做設置>管理應用程序>強制關閉。它不重新啓動我的服務。我有點困惑。 – Manasi

相關問題