2015-07-15 3 views
1

Я пытаюсь закодировать сигнал тревоги (это мое первое приложение). Я уверен, что это очень просто, но я застрял. Я вызываю активность в точное время, которое устанавливается в TimePickerDialog. Я использую getActivity(), поэтому я делаю это без BroadcastReceiver. Не исключено, что я выбрал плохо, но, к сожалению, это был только тот, который я нашел.Как просыпаться экран через AlarmManager?

Когда придет время, «MainActivity.class» открывается, но если экран заблокирован, это происходит, но экран остается выключенным. Я пытаюсь использовать WAKE_LOCK, но, полагаю, я сделал это неправильно, потому что у меня были ошибки в строке POWER_MANAGER.

private void setAlarm(Calendar targetCal){ 

    Intent intent = new Intent(this, MainActivity.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
    ((AlarmManager) getSystemService(ALARM_SERVICE)).set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); 
} 
  1. Как сделать свой экран на в точное время?
  2. Если возможно getActivity с BroadcastService, как я могу это сделать?

Я только начинаю изучать программирование, поэтому буду очень благодарен, если вы могли бы дать мне ссылку или широкий ответ.

ответ

1

Попробуйте эти:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

И добавить это разрешение в манифесте:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
+0

То же самое: дисплей остается выключенным, но когда я разблокирую, я вижу, что AlarmManager работает – Igor

+0

Это сработало для меня, спасибо. Не нужно приобретать wakelock, я просто использую эти флаги для окна, добавляя их в onCreate моей активности. –

1

Прежде всего дают разрешения в явном

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

Затем создайте ниже класс пробуждения ваш Телефон;

public class WakeLocker { 

private static PowerManager.WakeLock wakeLock; 

public static void acquire(Context ctx){ 
    if(wakeLock!=null)wakeLock.release(); 

    PowerManager pm=(PowerManager)ctx.getSystemService(Context.POWER_SERVICE); 
    wakeLock=pm.newWakeLock(PowerManager.FULL_WAKE_LOCK| 
      PowerManager.ACQUIRE_CAUSES_WAKEUP| 
      PowerManager.ON_AFTER_RELEASE,"tag"); 
    wakeLock.acquire(); 
} 

public static void release(){ 
    if(wakeLock!=null) 
     wakeLock.release(); 
    wakeLock=null; 
} 

} 

Добавить эту строку кода в начале вашего класса приемника аварийного сигнала (внутри метода OnRecieve);

WakeLocker.acquire(context); 

И эта строка кода в конце OnRecieve метода

WakeLocker.release(); 

Кроме того, я считаю, что лучше вызвать метод setExact() для менеджера сигнализации вместо набора() метод. Потому что метод set() срабатывает в течение данной минуты. Не совсем в начале минуты. Я предпочитаю метод setExact(), чем метод set().

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