Как проверить, если сигнализация была установлена ​​и работает


3

У меня есть приемник, которые начинаются после загрузки телефона, как это:

<receiver android:name=".OnBootReceiver" > 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 

</receiver> 

в приемнике бегаю установить сигнал, как это:

AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 

     Intent i=new Intent(context, LocationPoller.class); 

     i.putExtra(LocationPoller.EXTRA_INTENT, 
        new Intent(context, LocationReceiver.class)); 
     i.putExtra(LocationPoller.EXTRA_PROVIDER, 
       LocationManager.GPS_PROVIDER); 



     PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0); 
      mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
         SystemClock.elapsedRealtime(), 
         PERIOD, 
         pi); 

Он отлично работает, за исключением, конечно, когда пользователь устанавливает приложение, будильник не будет установлен до тех пор, пока пользователь не перезагрузит телефон.

Чтобы обойти это, мне нужно проверить свою активность, если AlarmManager установлен, если нет, мне нужно установить из Activity.

Следовательно, как проверить, установлен ли диспетчер аварийных сигналов.

  0

Вы можете посмотреть также: http://stackoverflow.com/questions/4556670/how-to-check-if-alarmmamager-already-has-an-alarm-set 17 дек. 132013-12-17 16:54:20

2

К сожалению, вы наклоненная AlarmManager запроса для текущих аварийных сигналов.

Лучшим вариантом для решения вашей проблемы будет cancel your current Alarm и установите новый.

Вам просто нужно создать намерение, соответствующее тому, которое есть в приемнике. More info here

так добавить к вашей деятельности

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    Intent i=new Intent(context, LocationPoller.class); 

     i.putExtra(LocationPoller.EXTRA_INTENT, 
        new Intent(context, LocationReceiver.class)); 
     i.putExtra(LocationPoller.EXTRA_PROVIDER, 
       LocationManager.GPS_PROVIDER); 

     PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0); 
    // Cancel alarms 
    try { 
     AlarmManager.cancel(pi); 
    } catch (Exception e) { 
     Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); 
    } 
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
         SystemClock.elapsedRealtime(), 
         PERIOD, 
         pi); 

Вы, вероятно, необходимо изменить контекст намерения поэтому его так же, как тот, в Ресивер.

Другим обходным решением будет обнаружение, если его первый запуск приложения, и только запустить его тогда. Но что произойдет, если пользователь перезагрузит свой телефон перед первым запуском?


4

Единственное, что вы можете сделать, это когда пользователь устанавливает приложение и открывает его в первый раз, когда вы можете установить флаг в SharedPreference, который сообщает вам, установлен ли будильник или нет, если он не установлен, установите Alaram.

в основных проверках Activity в onCreate методе

SharedPreferences spref = getSharedPreferences("TAG", MODE_PRIVATE); 

Boolean alaram_set = spref.getBoolean("alarm_set_flag", false); //default is false 

if(!alaram_set){ 
//create your alarm here then set the flag to true 

SharedPreferences.Editor editor = spref.edit(); 
     editor.putBoolean("alarm_set_flag", true); // value to store 
     editor.commit(); 
} 
  0

будет работать, если я запустил AlarmManager в другой виртуальной машины, чем моя активность с использованием опции «android: process =»: remote « 31 авг. 122012-08-31 11:34:05

+1

, если вы хотите получить доступ к общим предпочтениям из разных процессов вместо MODE_PRIVATE, используйте MODE_MULTI_PROCESS 31 авг. 122012-08-31 11:38:39