1

Я установил диспетчер аварийных сигналов для контроля времени. Моя цель продолжает контролировать время на экране. В то время как экран на все нормально, но когда я заблокирован на устройство (экран), мой вещательный приемник не приемник ничегоАварийный менеджер не запускается на экране выключен

Я попробовал много разных решений (в манифесте экспорта: false или process: ": remote") о аналогичная проблема, но проблема не решена. Мне нужно помочь. Надеюсь, кто-то решил эту проблему раньше.

Для менеджера набор сигнализации

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

    Intent intent = new Intent(context, TimeService.class); 
    intent.setAction(SETUP_TIMER_FOR_NOTIFICATION); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 112, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    long now = System.currentTimeMillis(); 
    long minute = 1000 * 60; 

    alarmManager.cancel(pendingIntent); 
    alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() , minute, pendingIntent); 

Мой приемник

public class TimeService extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 



Log.i("TimeService", "onReceive"); 

Intent timeIntent = new Intent(context, NotificationService.class); 
     timeIntent.setAction(SETUP_TIMER_FOR_NOTIFICATION); 

     startWakefulService(context, timeIntent); 


    } 
} 

Manifest.xml

<receiver 
      android:name="service.TimeService" 
      android:enabled="true" 
      android:exported="false" 
      > 

      <intent-filter> 
       <action android:name="alarm_timer_for_notification" /> 
      </intent-filter> 
     </receiver> 
+0

Вы можете проверить устройство, если его «батарея режим экономии» Вкл? Если он включен, выключите его, а затем попробуйте. Проблема, вероятно, лежит где-то в другом месте, но у меня недавно была такая проблема. –

+0

Я отключил свое приложение в режиме экономии заряда батареи, но сигнал тревоги не срабатывает. – Saravanan

+0

@SharpEdge, @ Saravanan Я разрешаю запускать режим сохранения батареи, но ничего не изменилось – gokhan

ответ

1

setAndAllowWhileIdle это работает, когда экран выключен и телефон в режиме ожидания

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

Поэтому мы используем https://developer.android.com/reference/android/app/AlarmManager.html#setAndAllowWhileIdle(int,%20long,%20android.app.PendingIntent)

От зефира и вверх, тревога просыпалась только 10 мин интервала, setAndAllowWhileIdle также пожарная служба или уведомление 10 минут один раз, когда телефон находится в режиме ожидания (экран выключен).

В нормальном режиме временного интервала работает нормально (я проверил 3 интервала Мин)

public class TimeService extends WakefulBroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

    Log.i("TimeService", "onReceive"); 

    Intent timeIntent = new Intent(context, NotificationService.class); 
    timeIntent.setAction(SETUP_TIMER_FOR_NOTIFICATION); 

    startWakefulService(context, timeIntent); 

    setAlarm(context); 
} 

public void setAlarm(Context context) 
{ 
    Timber.v(TAG +"set Alarm"); 
    PreferencesHelper preferencesHelper =new PreferencesHelper(context); 
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, TimeService.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
    int intervalInMinutes = preferencesHelper.getInt(context.getResources().getString(R.string.sha_loc_intervals), 1)* 60000; 
     if (android.os.Build.VERSION.SDK_INT >= 23) { 
     alarmManager.setAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
       SystemClock.elapsedRealtime()+intervalInMinutes , pendingIntent); 
    } else if (android.os.Build.VERSION.SDK_INT >= 19 
      && android.os.Build.VERSION.SDK_INT < 23) { 
     alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+intervalInMinutes , pendingIntent); 
    } else { 
     alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+intervalInMinutes , pendingIntent); 
    } 
} 

public void cancelAlarm(Context context) 
{ 
    Timber.v(TAG +"cancel Alarm"); 
    Intent intent = new Intent(context, TimeService.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(pendingIntent); 
}} 

<receiver android:name=".TimeService" 
       android:enabled="true" 
       android:exported="true" 
       android:process=":remote"> 
</receiver> 

В MainActivity.class

TimeService timeService = новый TimeService();

timeService.setAlarm (MainActivity.this);

0

Вы хотите получить разрешение в файле манифеста.

использует разрешение-андроид: имя = «android.permission.WAKE_LOCK»

WakeLock представляет собой механизм, чтобы держать устройство на

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