2011-11-18 22 views
5

Tôi có totalTime = 1 giờ và và intervalTime = 5min, cả hai đều ở phần nghìn giây,Làm thế nào để dừng lặp lại các dịch vụ báo động trong Android?

Tôi muốn lặp lại dịch vụ GPSSetting tôi mỗi khoảng thời gian và sau khi hoàn thành totaltime này lặp đi lặp lại shoud được dừng lại.

AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
       Intent intent1 = new Intent(C2DMReceiver.this, GPSSetting.class); 
       PendingIntent pendingIntent = PendingIntent.getService(
         C2DMReceiver.this, 0, intent1, 0); 
       am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), intervalTime, 
         pendingIntent); 

Vậy làm thế nào để tôi có thể dừng báo thức lặp lại này?

Kính trọng, Girish

+0

http://stackoverflow.com/questions/3330522/how-to-cancel-this-repeating-alarm – trante

Trả lời

4

Tạo cùng PendingIntent như khi bạn đăng ký báo động và sử dụng AlaramManager.cancel() để hủy bỏ nó.

+0

nhưng sau thời gian cụ thể –

+0

Lưu trữ lần đầu tiên báo thức chạy ở đâu đó và tính thời gian trôi qua mỗi khi nó chạy . Nếu quá 1 giờ, hãy hủy báo thức. –

+0

xin vui lòng u có thể gửi cho tôi mã nguồn –

0

Bạn có thể hủy báo động bằng cách truyền các mục đích đang chờ giải quyết mà bạn đã dùng khi thiết lập trong phương pháp hủy của người quản lý báo động:

am.cancel(pendingIntent); 
+1

@maneesh .... Tôi muốn trở thành Automaticaly Hủy Báo thức sau 1 giờ..vì vậy tôi có thể làm cái này ? –

+0

bạn phải đặt một báo thức khác sẽ hoạt động ngay sau một giờ và chịu trách nhiệm chỉ hủy báo thức cụ thể – Maneesh

4

Nếu bạn đã thiết lập dịch vụ báo động cho lặp đi lặp lại khoảng thời gian và bạn muốn để hủy dịch vụ của bạn, sau đó giải pháp này sẽ giúp bạn, trước hết tôi tạo dịch vụ lặp lại sau mỗi 30 giây, nhưng khi tôi nhấn nút dừng thì nó sẽ hủy tất cả dịch vụ mà tôi đã tạo.

public void AlarmService_afte30sec() 
    { 

     Toast.makeText(this, "Starting Alarm Services", Toast.LENGTH_LONG).show(); 
     Intent myIntent = new Intent(this, StartAlarmServices.class); 
     pendingIntent = PendingIntent.getService(this, 0, myIntent, 0); 

       alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
       Calendar calendar = Calendar.getInstance(); 
       calendar.setTimeInMillis(System.currentTimeMillis()); 
       int sec=30; 
       alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sec*1000, pendingIntent); 
    } 

Bây giờ tôi sẽ dừng/hủy dịch vụ này sử dụng cùng một "pendingintent" và "alarmManager", để hủy bỏ này mã sẽ

public void stopservice() 
{ 
     alarmManager.cancel(pendingIntent);  
    } 
2

Bạn có thể vượt qua một giá trị tăng thêm ý định như 1 giờ (hoặc bất kỳ) nào từ thời gian hiện tại của hệ thống. Sau đó, bạn có thể kiểm tra giá trị đó từ bên trong sự kiện onBind() của dịch vụ và so sánh nó. Sau đây là một ví dụ:

//your code: 
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
      Intent intent1 = new Intent(C2DMReceiver.this, GPSSetting.class); 

//my code: 
intent1.putExtra("end", System.currentTimeMillis() + 3600000); //current time plus 1 hour 

//your code: 
      PendingIntent pendingIntent = PendingIntent.getService(
        C2DMReceiver.this, 0, intent1, 0); //You might wanna give PendingIntent.FLAG_UPDATE_CURRENT as flag. 
      am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), intervalTime, 
        pendingIntent); 

Sau đó bên trong onBind() tole:

public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
long end = intent.getLongExtra("end", 0); 
if(end <= System.currentTimeMillis()){ 
     AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
     PendingIntent pendingIntent = PendingIntent.getService(
        this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     am.cancel(pendingIntent); 
} 
    return null; 
} 

Không chắc chắn nếu nó sẽ làm việc cho các dịch vụ nhưng nó làm việc cho BroadcastReceiver.