2013-05-24 7 views
0

У меня есть повторная тревога, зарегистрированная и она работает. Но когда я пытаюсь отменить его, он не отменяет. Я попытался решения в этих Postes: post1post2 OnCreate активность в():Аварийная сигнализация не отменяет

private void init() { 
     btToggleLocationService = (Button) findViewById(R.id.btToggleLocationService); 
     btToggleLocationService.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(LocatorAlarmManager.isRegistered(MainActivity.this)){ 
        Log.d(TAG, "onClick() Alarm registered, stopping..."); 
        LocatorAlarmManager.stopAlarm(MainActivity.this); 
        updateServiceButton(); 
       }else{ 
        Log.d(TAG, "onClick() Alarm not registered, registreing..."); 
        LocatorAlarmManager.registerAlarm(MainActivity.this); 
        updateServiceButton(); 
       } 

      } 
     }); 
     updateServiceButton(); 
    } 

И мой LocationAlarmManager класс:

public class LocatorAlarmManager { 
    private static final String TAG = LocatorAlarmManager.class.getSimpleName(); 
    public static final int REQUEST_CODE = 99321; 

    /** 
    * Registers the Location alarm. Will ignore call if its already registerd. 
    */ 
    public static void registerAlarm(Context context) { 
     if (isRegistered(context)) { 
      Log.i(TAG, "already Registred alarmt"); 
      return; 
     } 
     long firstTime = SystemClock.elapsedRealtime(); 
     firstTime += 3 * 1000; 

     SharedPreferences sPrefs = PreferenceManager 
       .getDefaultSharedPreferences(context); 
     AlarmManager am = (AlarmManager) context 
       .getSystemService(Activity.ALARM_SERVICE); 
     am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 
       LocaterSettings.getSendLocationInterval(sPrefs) * 1000L, 
       getSendLocationIntent(context, 0)); 
     Log.i(TAG, "registerAlarm() Registred alarmt"); 

    } 

    /** 
    * Checks if the Location alarm has been registered or not. 
    * 
    * @return true if its registed, false if not. 
    */ 
    public static boolean isRegistered(Context context) { 
     boolean alarmUp = getSendLocationIntent(context, 
       PendingIntent.FLAG_NO_CREATE) != null; 

     if (alarmUp) { 
      Log.d(TAG, "isRegistered() Alarm is already active"); 
      return true; 
     } else { 
      Log.d(TAG, "isRegistered() Alarm is NOT active"); 
      return false; 
     } 
    } 

    public static void stopAlarm(Context context) { 
     Log.d(TAG, "stopAlarm() Stopping alarm"); 
     AlarmManager alarmManagerstop = (AlarmManager) context 
       .getSystemService(Activity.ALARM_SERVICE); 
     try { 
      alarmManagerstop.cancel(getSendLocationIntent(context, 0)); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     Log.d(TAG, "stopAlarm() Stopped alarm"); 
    } 

    private static PendingIntent getSendLocationIntent(Context context, int flag) { 
     return PendingIntent.getBroadcast(context, REQUEST_CODE, new Intent(
       context, LocationReciever.class), flag); 

    } 

Вход:

Button Click start alarm 
05-23 21:35:29.780: D/LocatorAlarmManager(16329): isRegistered() Alarm is NOT active 
05-23 21:35:29.780: D/MainActivity(16329): onClick() Alarm not registered, registreing... 
05-23 21:35:29.780: D/LocatorAlarmManager(16329): isRegistered() Alarm is NOT active 
05-23 21:35:29.790: I/LocatorAlarmManager(16329): registerAlarm() Registred alarmt 
05-23 21:35:29.790: D/LocatorAlarmManager(16329): isRegistered() Alarm is already active 

Button Click stop alarm 
05-23 21:35:59.203: D/LocatorAlarmManager(16329): isRegistered() Alarm is already active 
05-23 21:35:59.203: D/MainActivity(16329): onClick() Alarm registered, stopping... 
05-23 21:35:59.203: D/LocatorAlarmManager(16329): stopAlarm() Stopping alarm 
05-23 21:35:59.203: D/LocatorAlarmManager(16329): stopAlarm() Stopped alarm 
05-23 21:35:59.203: D/LocatorAlarmManager(16329): isRegistered() Alarm is already active 

Проблема последняя строка log, он должен быть отменен, но после этого его снова проверили, и он говорит, что он «уже зарегистрирован», я хотел бы знать, что такое неправильно с моим действием остановки будильника. Заранее спасибо.

ответ

1

Вам необходимо будет отменить PendingIntent и после отмены тревоги.

try { 
    alarmManagerstop.cancel(getSendLocationIntent(context, 0)); 
    getSendLocationIntent(context, 0).cancel(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Это исправит вашу проблему.

-1

Когда вы создаете PendingIntent, используйте PendingIntent.FLAG_UPDATE_CURRENT в качестве последнего аргумента.

return PendingIntent.getBroadcast(context, REQUEST_CODE, new Intent(context, 
    LocationReciever.class), PendingIntent.FLAG_UPDATE_CURRENT); 
+0

Это не помогло. Тот же журнал, те же результаты. – wtsang02

Смежные вопросы