Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应使用PowerManager唤醒设备多长时间,以确保显示使用BroadcastReceiver创建的活动?_Java_Android_Broadcastreceiver_Alarmmanager_Powermanager - Fatal编程技术网

Java 应使用PowerManager唤醒设备多长时间,以确保显示使用BroadcastReceiver创建的活动?

Java 应使用PowerManager唤醒设备多长时间,以确保显示使用BroadcastReceiver创建的活动?,java,android,broadcastreceiver,alarmmanager,powermanager,Java,Android,Broadcastreceiver,Alarmmanager,Powermanager,我有我的AlarmManager,它在任何时间后都会指向我的BroadcastReceiver。因此,设备当然可以处于空闲(睡眠)模式,包括密码锁定。我想知道使用PowerManager是否是良好的实践和必要的,因为 说 “创建和保持尾流锁会对 主机设备的电池寿命。因此,只有在 绝对必要,并尽可能短时间持有。对于 例如,您不应该在活动中使用唤醒锁 如上所述,如果您想在活动中保持屏幕打开, 使用“保持屏幕打开”标志。“ 为了更好地理解:最终它应该是默认Android闹钟的副本 舱单: &l

我有我的
AlarmManager
,它在任何时间后都会指向我的
BroadcastReceiver
。因此,设备当然可以处于空闲(睡眠)模式,包括密码锁定。我想知道使用
PowerManager
是否是良好的实践和必要的,因为 说

“创建和保持尾流锁会对 主机设备的电池寿命。因此,只有在 绝对必要,并尽可能短时间持有。对于 例如,您不应该在活动中使用唤醒锁 如上所述,如果您想在活动中保持屏幕打开, 使用“保持屏幕打开”标志。“

为了更好地理解:最终它应该是默认Android闹钟的副本

舱单:

    <receiver android:name=".AlarmReceiver">
        <intent-filter>
            <category
            android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

    <activity android:name=".RingtoneAlarm">
    </activity>
意图开启的活动:

public class RingtoneAlarm extends AnyOfMyActivitynamesIGuess{
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ringtonealarm);
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
|WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
   //(setShowWhenLocked(true);setTurnScreenOn(true); My sidenote: both methods are too new for most required API levels)
   //Remember to implement: PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyApp::MyWakelockTag"); wakeLock.release();
[...]
}
}
这是我唯一能让手机在手机处于空闲(睡眠)模式并使用密码锁定的准确时间唤醒的方法。 如果我将
PowerManager
放入RingtoneAlarm活动中,它将不工作,因为该活动未创建,因此
getWindow().addFlags(…)未激活。如果没有PowerManager,我无法找到一种方法使其工作(如前所述:文档称这不是一种好的做法)。更重要的是,
PowerManager
只是一个解决办法,因为我只需要在
BroadcastReceiver
和创建RingtoneAlarm活动之间的一小段时间使用它,将来可能会像
FLAG\u TURN\u SCREEN\u ON
一样被弃用

那么它在wakeLock中应该有多少秒;在收音机里?3秒太短了,不起作用,10分钟可能有点过分了。。。或者没有PowerManager还有更好的解决方案吗?

根据,在Android Q(API 29)及更高版本设备上运行时,根本不允许从后台启动活动

如中所述:

在几乎所有情况下,后台应用程序都应该向用户提供信息,而不是直接启动活动

在特定情况下,您的应用程序可能需要紧急引起用户的注意,例如持续报警或来电。您以前可能已将应用程序配置为为此目的启动后台活动


他们的默认闹钟实际上早在API 11添加API时就已经完成了这项工作(该API在中也可用)。这允许您在通知中添加一个意图,在设备屏幕关闭时自动启动活动,这是闹钟应用程序的推荐做法。

当然不推荐使用。是什么给了你这样的印象?请注意,在Android 10上禁止从后台启动活动。请使用全屏显示的高优先级通知。@ianhanniballake对不起,我的意思是
FLAG\u TURN\u screen\u ON
。编辑的itI是编程新手:所以我应该忘记PowerManager和
getWindow().addFlags(WindowManager.LayoutParams.FLAG_保持屏幕打开| WindowManager.LayoutParams.FLAG_锁定时显示| WindowManager.LayoutParams.FLAG_打开屏幕|对于29岁以下的API,是否为偶数?我更愿意使用
setFullScreenIntent
和高于11的每个API的通知来构建它,对吗?@ThomasR-您当然不需要
FLAG\u TURN\u SCREEN\u ON
-系统会在使用
setFullScreenIntent()时为您打开屏幕
public class RingtoneAlarm extends AnyOfMyActivitynamesIGuess{
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ringtonealarm);
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
|WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
   //(setShowWhenLocked(true);setTurnScreenOn(true); My sidenote: both methods are too new for most required API levels)
   //Remember to implement: PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyApp::MyWakelockTag"); wakeLock.release();
[...]
}
}