我正在尝试编写闹钟代码(这是我的第一个应用程序)。我确信这很容易执行,但我被卡住了。我在 TimePickerDialog
中设置的准确时间调用 Activity 。我使用 getActivity()
,所以我没有使用 BroadcastReceiver
。不排除是我选错了,可惜,我只找到了一个。
当时间到了“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);
}
- 如何让我的屏幕在准确的时间点亮?
- 如果可以使用
BroadcastService
getActivity
,我该怎么做?
我刚开始学习编程,所以如果你能给我一些链接或一个广泛的答案,我将不胜感激。
最佳答案
首先在 list 中赋予权限
<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;
}
}
在您的 Alarm Reciever 类的开头添加此代码行(在 OnRecieve 方法内);
WakeLocker.acquire(context);
OnRecieve 方法末尾的代码行
WakeLocker.release();
此外,我认为最好为警报管理器调用 setExact() 方法而不是 set() 方法。因为 set() 方法在给定的分钟内触发。不完全是在一分钟开始。我更喜欢 setExact() 方法而不是 set() 方法。
关于android - 如何通过AlarmManager唤醒屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31439581/