У меня есть повторная тревога, зарегистрированная и она работает. Но когда я пытаюсь отменить его, он не отменяет. Я попытался решения в этих 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, он должен быть отменен, но после этого его снова проверили, и он говорит, что он «уже зарегистрирован», я хотел бы знать, что такое неправильно с моим действием остановки будильника. Заранее спасибо.
Это не помогло. Тот же журнал, те же результаты. – wtsang02