2014-03-04 38 views
1
有效地跟蹤報警計數的數量

我寫了一個BroadcastReceiver如下:如何使用AlarmManager

public class myBroad extends BroadcastReceiver{ 
int count; 
@Override 
public void onReceive(Context context, Intent intent) { 
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "tgs"); 
      wl.acquire(); 
      try{ 
      Bundle extras = intent.getExtras(); 
      count=Integer.parseInt(extras.getString("status")); 
      } 
      catch(Exception e){ 
       //nothing here 
      } 
      Toast.makeText(context, "value from onReceive:"+count, Toast.LENGTH_SHORT).show(); 
      wl.release(); 
    } 
public void SetAlarm(Context context){ 
    try 
    { 
     SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); 
     String count=sharedPrefs.getString("list_update_count",""); 
     Intent in = new Intent(context, myBroad.class); 
     in.putExtra("status",count); 
     PendingIntent pintent = PendingIntent.getBroadcast(context, 0, in, 0); 
     AlarmManager alarm = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10*1000, pintent); 
    } 
    catch(Exception e) 
     { 
      Toast.makeText(context, e+"Here", Toast.LENGTH_SHORT).show(); 
     } 
} 
public void CancelAlarm(Context context) 
     { 
      Intent intent = new Intent(context, myBroad.class); 
      PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
      AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
      alarmManager.cancel(sender); 
     } 
    } 

蔭傳遞計數的號碼(例如:5,這是一個報警必須觸發的次數) BroadcastReciever其工作得很好,但我不知道如何跟蹤onReceive()方法解僱次數!每次OnReceive()方法調用時,計數都是一樣的(正如我所說:它的5)。因爲所有onReceive()方法都接收到相同的值:( 請幫我跟蹤計數,所以,我可以取消報警。

回答

2

(編輯可重用性)

「正確」的方式做到這一點取決於你想要達到的目的這是一個可能的解決方案,使用了共享偏好在任何給定的時間保持計數:

try{ 
     Bundle extras = intent.getExtras(); 
     int defaultCount=Integer.parseInt(extras.getString("status")); 

     SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); 
     int count = sharedPrefs.getInt("current_count", defaultCount); 
     if(--count == 0) { 
      CancelAlarm(context); 
      sharedPrefs.edit().remove("current_count").commit(); 
     } else { 
      sharedPrefs.edit().putInt("current_count", count).commit(); 
     } 
    } 
    catch(Exception e){ 
     //nothing here 
    } 
+0

這不會工作,因爲計數不會像預期的那樣減少,因爲每次th en「current_count」將被替換爲defaultCount,任何方式感謝您的想法,Iam使用SharedPref跟蹤更改... :) – Shan

+0

我很高興這指出你在正確的方向。然而,我的解決方案**將**工作 - 請注意,我保存到'count'從共享首選項的值 - 只有當共享首選項尚未初始化,我使用'defaultCount'。 – PaF

+0

是的。 ..它是我的錯誤。這個作品!!!!!! – Shan