我试图编码闹钟(这是我的第一个应用)。我确定它很简单,但我被卡住了。我在TimePickerDialog
中设置的确切时间内调用活动。我使用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);
}
getActivity
与BroadcastService
,我该怎么做?我刚刚开始学习编程,所以如果你能给我一些链接或一个广泛的答案,我将非常感激。
答案 0 :(得分: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" />
答案 1 :(得分:1)
首先在清单中提供权限
SCNTransaction
然后创建以下课程以唤醒您的手机;
SCNTransaction.begin()
SCNTransaction.animationDuration = (0.5)
SCNTransaction.animationTimingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
SCNTransaction.completionBlock = {
SCNTransaction.begin()
SCNTransaction.animationDuration = (0.5)
self.scnScene.physicsWorld.speed = 1
NSLog("animate finished")
SCNTransaction.commit()
}
NSLog("animating")
self.scnScene.physicsWorld.speed = 0.2
node.removeFromParentNode()
SCNTransaction.commit()
在Alarm Reciever类的开头添加此代码行(在OnRecieve方法内);
<uses-permission android:name="android.permission.WAKE_LOCK" />
OnRecieve方法结束时的代码行
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 Manager而不是set()方法调用setExact()方法。因为set()方法在给定的分钟内触发。不完全是在分钟的开始。我更喜欢setExact()方法而不是set()方法。