2015-03-04 4 views
0

Я создаю приложение с виджетами. Виджет обновляется каждые 10 секунд через AlarmManager, но я бы хотел, чтобы AlarmManager остановился, когда экран выключен, чтобы предотвратить возможный разряд батареи. Как я могу сделать? Я пытался использовать PowerManager, но безуспешно. я реализовал AlarmManager в WidgetProvider, и через эфир называет класс WidgetReceiver, который обновляет значениякак остановить обновление виджета андроида при отключении экрана?

-WIDGET ПОСТАВЩИК:

public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 
    AlarmManager alarmManager = (AlarmManager) context 
      .getSystemService(Context.ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC, 
      System.currentTimeMillis() + 1000, 1000 * 5, update(context)); 
} 

public static PendingIntent update(Context context) { 
    Intent intent = new Intent(); 
    intent.setAction("com.aaa.intent.action.UPDATE_TIME"); 
    if (service == null) { 
     service = PendingIntent.getBroadcast(context, 0, intent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 
    } 
    return service; 
} 

-WIDGET RECEIVER:

public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals("com.gabriele.intent.action.UPDATE_TIME")) { 
     updateWidget(context); 
    } 

} 

private void updateWidget(Context context) { 

    update my widget 
} 

ответ

0

Как насчет проверить, включен ли экран при запуске будильника?

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
if (pm.isScreenOn()) { 
    // schedule the alarm 
} 
0

Что-то вдоль линий это выключить сигнал тревоги при отключении экрана:

@Override 
protected void onPause() { 
    super.onPause(); 
    // If the alarm has been set, cancel it. 
    if (alarmMgr!= null) { 
     alarmMgr.cancel(alarmIntent); 
    } 
} 

Если вы хотите, чтобы начать снова, когда экран снова включится, вы должны будете добавьте соответствующий код в onResume.

EDIT

Упс, это выключить сигнал тревоги, когда деятельность была приостановлена. Лучше было бы совместить это с другим ответом так:

PowerManager pm; 

@Override 
protected void onPause() { 
    super.onPause(); 
    if (pm==null) { 
     pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    } 
    // If the alarm has been set AND the screen is off 
    if (alarmMgr!= null && !pm.isScreenOn()) { 
     alarmMgr.cancel(alarmIntent); 
    } 
} 
+0

спасибо, но я не могу реализовать это, потому что я в классе WidgetProvider – gabg

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

  • Нет связанных вопросов^_^