2017-07-02 6 views
1

私は2つのアラームを独自のサービスを開始しようとしています。彼らは一度に一人しか働くので、彼らはお互いに干渉しているように見えます。私のコードで変更すべきことはありますか?それともできないのですか?どのように2つのアラームを2つのサービスを開始するには?

public void setAlarm(){ 
    AlarmManager alarmMgr1 = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, DrawOverAppsService.class); 
    Float alpha2 = alpha.getProgress()/100f; 
    intent.putExtra("alpha", alpha2); 

    PendingIntent alarmIntent1 = PendingIntent.getService(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    if(start.isChecked()) { 
     alarmMgr1.cancel(alarmIntent1); 
     java.util.Calendar calendar = java.util.Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(java.util.Calendar.HOUR_OF_DAY, 19); 
     calendar.set(Calendar.MINUTE, 0); 
     calendar.set(Calendar.SECOND, 0); 
     alarmMgr1.setRepeating(AlarmManager.RTC_WAKEUP, 
       calendar.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY, alarmIntent1); 
     Log.d("a","b"); 
    } 
    if(start.isChecked() == false) { 
     alarmMgr1.cancel(alarmIntent1); 
    } 
} 
public void stopAlarm(){ 
    AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent5 = new Intent(this, stopOverlay.class); 
    PendingIntent alarmIntent = PendingIntent.getService(MainActivity.this, 2, intent5, 0); 
    if(stop.isChecked()) { 
     alarmMgr.cancel(alarmIntent); 
     java.util.Calendar calendar = java.util.Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(java.util.Calendar.HOUR_OF_DAY, 5); 
     calendar.set(Calendar.MINUTE, 0); 
     calendar.set(Calendar.SECOND, 0); 
     alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, 
       calendar.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY, alarmIntent); 
    } 
    if(stop.isChecked() == false) { 
     alarmMgr.cancel(alarmIntent); 
    } 
} 

答えて

0

このコードでは、異なる時刻に2つの別々のサービスを開始するように2つのアラームをスケジュールします。

MainActivityのonCreateメソッドが完了してから60秒および120秒間アラームが設定されます。 (注意:アラームは必ずしもが正確 60と120秒後なぜならAlarmManagerの不正確なスケジューリングのは、時にはそれは、アラームがオフに行く見に忍耐の驚くべき量を要し発生しません)

あなたが見ることができる2つのサービスのonStartコマンドは、アプリケーションのログ出力を監視して実行されています。

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private static final String TAG = "MainActivity"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     setAlarm(Service1.class, 60); 
     setAlarm(Service2.class, 120); 

    } 

    public void setAlarm(Class serviceClass, int delay){ 
     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, serviceClass); 
     PendingIntent alarmIntent = PendingIntent.getService(MainActivity.this, 
       0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     alarmManager.cancel(alarmIntent); 
     java.util.Calendar calendar = java.util.Calendar.getInstance(); 
     calendar.add(Calendar.SECOND, delay); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
       calendar.getTimeInMillis(), 
       AlarmManager.INTERVAL_DAY, alarmIntent); 

     Log.d(TAG,"alarm set:" + serviceClass.getSimpleName()); 
    } 
} 

Service1.java

public class Service1 extends Service { 

    private static final String TAG = "service1"; 

    @Override 
    public IBinder onBind(Intent intent) { 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.v(TAG, "service started"); 
     return super.onStartCommand(intent, flags, startId); 
    } 

} 

Service2.java

public class Service2 extends Service { 

    private static final String TAG = "service2"; 

    @Override 
    public IBinder onBind(Intent intent) { 
     throw new UnsupportedOperationException("Not yet implemented"); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.v(TAG, "service started"); 
     return super.onStartCommand(intent, flags, startId); 
    } 

} 
関連する問題