标签: android-powermanager

强制安卓手机入睡,以便测试?

我正在编写一个取决于网络活动的Android应用程序,警报管理器有时会将手机从睡眠状态唤醒.

我的问题是如何在设备上可靠地测试?理想情况下,我如何强制手机进入全开睡眠状态.如果做不到这一点,我怎么能确定电话完全进入睡眠状态?

如何测试警报管理器/唤醒锁定/睡眠处理代码?

android android-powermanager sleep-mode

24
推荐指数
2
解决办法
1万
查看次数

android设备什么时候进入睡眠模式?

我正在搜索SO和网络,但我找不到足够的答案来解决我的问题.好的,我们走了:

每个用户都可以在android上修改屏幕超时.(当屏幕空闲__秒/分钟时关闭屏幕 - 用户选择).但是用户只能修改屏幕超时,而不能在设备实际进入睡眠状态时修改.我在这里发现当设备进入睡眠状态时会发生什么:( CommonsWare非常好的答案)Android睡眠/待机模式

好的,我的问题很简单.我怎么知道我的手机何时会入睡?关闭屏幕后会立即进入睡眠状态吗?屏幕关闭后它会保持"清醒"一段时间吗?最重要的是:特定设备的睡眠模式是否与品牌设备不同(制造商如何实施)或者取决于ROM版本(例如,所有ICS供电设备将在屏幕关闭后X秒进入睡眠状态)?

android android-powermanager sleep-mode

20
推荐指数
3
解决办法
3万
查看次数

检查应用程序是否启用了电池优化

Android 6和7有一些功耗优化(打盹模式),在不使用设备时限制应用程序网络.

用户可以在电池设置中禁用任何应用的优化模式:

android设置截图

是否可以检查是否为我的应用启用了优化?我需要让用户禁用优化以获得更好的应用功能,但我不知道如何以编程方式检查它.

android powermanager android-powermanager

19
推荐指数
4
解决办法
2万
查看次数

在inKeyguardRestrictedInputMode()中返回失败结果

我有一个功能来确定手机屏幕的四种状态:屏幕打开,屏幕关闭,屏幕打开锁定,屏幕打开无锁定.我的功能是

private KeyguardManager keyguardManager;
public String getScreenStatus()
{
    String sreen_State="unknown";
    keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
    PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
        if (pm.isInteractive()) {
            sreen_State="screen_on";
            if(!keyguardManager.inKeyguardRestrictedInputMode()) {
                sreen_State="screen_on_no_lock_screen";

            }else{
                Log.i(TAG, "screen_on_lock_screen");
                sreen_State="screen_on_lock_screen";
            }
        }
        else {
            sreen_State="screen_off";
        }
    }
    else if(Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT_WATCH){
        if(pm.isScreenOn()){
            sreen_State="screen_on";
            if(!keyguardManager.inKeyguardRestrictedInputMode()) {
                Log.i(TAG, "screen_on_no_lock_screen");
                sreen_State="screen_on_no_lock_screen";

            }else{
                Log.i(TAG, "screen_on_lock_screen");
                sreen_State="screen_on_lock_screen";
            }

        }
        else {
            mIsScreenOn=false;
            sreen_State="screen_off";
        }
    }
    return sreen_State;
}
Run Code Online (Sandbox Code Playgroud)

上述功能返回屏幕的校正状态.但是,当我再添加一个代码时,它有错误,如下所示:

 KeyguardManager.KeyguardLock
 kl = keyguardManager.newKeyguardLock("MyKeyguardLock");
 if(index.equals("1"))
        kl.disableKeyguard();
  else if(indexequals("2"))
        kl.reenableKeyguard();
  getScreenStatus();
Run Code Online (Sandbox Code Playgroud)

按下按钮可以改变索引.现在,屏幕状态出现了错误.它总是返回 …

android android-service android-powermanager

12
推荐指数
1
解决办法
452
查看次数

Android 12 电池优化

我正在尝试检查 Android 12 是否正在优化我的应用程序电池使用情况,因此我使用了 isIgnoringBatteryOptimizations方法( https://developer.android.com/reference/android/os/PowerManager#isIgnoringBatteryOptimizations(java.lang.String))。但是isIgnoringBatteryOptimizations返回一个布尔值yes,它已经过优化,而 Android 12 有 3 个级别的优化(查看屏幕截图):

  1. 无限制
  2. 优化
  3. 受限制的

我的应用程序在 1 和 2 的情况下工作正常,我想在受限模式下显示警告。

在此输入图像描述

optimization android battery android-powermanager android-12

11
推荐指数
1
解决办法
5263
查看次数

以编程方式解锁屏幕

我有一个分享按钮GCM notification.点击分享按钮,我需要启动分享意图.一切都很完美.我面临的唯一问题是Lollipop锁屏功能.当我从锁定屏幕单击共享按钮时,我的意图对话框出现在锁定屏幕下方,用户必须解锁屏幕才能看到对话框.单击共享按钮时,我想以编程方式解锁屏幕.

我尝试使用Power Manager,但是它的所有wakeClock标志都已弃用并且WindowManager.LayoutParams.Flag_KEEP_SCREEN_ON建议使用.但我不是在这里使用活动.我正在使用broadcastReciever context.因此我不能使用getWindow()方法.

我也尝试过KeyguardManager.但即便disableKeyguard()被解除了.

Intent.ACTION_SCREEN_ON如果我们想在屏幕解锁后执行任何操作,我不能使用,因为这应该使用.

我曾使用以下意图以编程方式关闭通知托盘:

Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        mContext.sendBroadcast(it);
Run Code Online (Sandbox Code Playgroud)

是否有类似的意图,可以广播解锁屏幕

使用DevicePolicyManager更新了代码:

public static void handleShareBtnClick(Context context, String message) {
    GcmHelper helper = new GcmHelper();
    helper.shareMessage(context, message);
    if(Utility.isLollypopAndAbove()){
          helper.unlockLockScreen();
    }
    helper.launchShareforForAlert();

}



   public void unlockLockScreen(){
        DevicePolicyManager devicePolicyMngr= (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
        ComponentName compName=new ComponentName(mContext, DeviceAdminReceiver.class);
        if(!devicePolicyMngr.isAdminActive(compName))
            devicePolicyMngr.removeActiveAdmin(compName);
    }
Run Code Online (Sandbox Code Playgroud)

即使在使用DevicePolicyManager之后,它也无法解锁我的屏幕

android unlock android-intent keyguard android-powermanager

10
推荐指数
1
解决办法
2万
查看次数

如何避免我的应用程序在Samsung设备上进入优化

智能管理器会杀死一个尚未使用3天的应用.我的应用程序做了一些后台工作,因此,用户不需要打开它.

我该怎么办才能进入优化模式(Android OS 5.0.2,5.1.1)

android android-powermanager android-5.0-lollipop

10
推荐指数
2
解决办法
5954
查看次数

应用备用桶不确认用户交互

我有一个 VOIP 应用程序,每次执行呼叫时都会使用高优先级推送通知。推送通知是消息通知,因为我想自己处理交互。当我收到推送时,我会启动一个前台服务,该服务开始侦听 SIP 通信,然后打开用户与之交互的自定义​​呼叫屏幕(活动)。对于 android PI ACTION_MANAGE_OVERLAY_PERMISSION,即使从服务中我也可以始终打开呼叫屏幕。

我相信会发生的是备用存储桶没有检测到用户与此流的交互,因为我的高优先级消息受到限制。从 FCM 诊断中,我可以看到推送通知传到手机,但没有广播到应用程序本身。

将手机置于此状态时,我也可以毫无问题地复制此内容:

./adb shell dumpsys battery unplug                           
./adb shell am set-inactive package.name.com true
./adb shell dumpsys deviceidle force-idle 
Run Code Online (Sandbox Code Playgroud)

我如何确保打开的活动算作用户交互,或者如果这不可能,如何更改流程以使其工作但仍打开自定义呼叫屏幕活动?

android android-powermanager firebase-cloud-messaging

10
推荐指数
0
解决办法
110
查看次数

Android P Beta-AlarmManager通知不起作用

我正在Android P Beta版本4上测试我的应用程序。我的应用程序的targetSdkVersion为27

已经观察到警报管理器通知未按预期工作。我正在使用以下代码来设置通知-

           if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, AlarmIntentBuilder.buildPendingIntent(context, uri));
            } else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, AlarmIntentBuilder.buildPendingIntent(context, uri));
            } else {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, AlarmIntentBuilder.buildPendingIntent(context, uri));
            }
Run Code Online (Sandbox Code Playgroud)

我在Android 8.0上测试了相同的逻辑,但工作正常。在Android 9.0中,通知有效,但有时根本不起作用。另外,如果它们能正常工作,它们并不精确,并且会花费大量时间,即使应用程序处于前台,也会发生这种情况。

逻辑是,我有在特定时间设置的重复提醒,这些提醒应该每天在指定时间自行重复。另外,这些都是高优先级提醒,应该在确切的时间降落,因此我正在使用setExact,一旦收到通知,它就会显示出来,并设置同一天下周的新警报。

我已经检查了Android P API文档,但是找不到任何对AlarmManager和Notifications的工作有影响的链接。我唯一引起问题的是Android P中的电源管理和优先级存储桶。但是,即使应用程序位于前台,通知也无法正常工作。

我在这里想念的任何东西。任何帮助深表感谢。

android android-alarms android-notifications android-powermanager android-9.0-pie

7
推荐指数
2
解决办法
3574
查看次数

到处走走魅族App自动清洁

我有一个问题,一个魅族手机正在杀死我的应用程序,因为似乎是一个魅族特定的设置,在运行后应用程序被杀死并在后台耗电3分钟,待机后.默认情况下,手机上的某些应用似乎免除此功能.有没有人知道如何让我的应用程序默认免除此自动清理?干杯

android battery android-service android-powermanager

5
推荐指数
0
解决办法
369
查看次数

排除安卓应用被放入备用桶

随着 Android 9 电池优化得到进一步推进,应用程序根据用户最近与应用程序交互的程度将应用程序分类为待机存储区(请参阅Android 文档)。系统会根据应用所在的存储桶限制每个应用可用的设备资源。

即使用户不与之交互,我如何将我的应用程序保留在“工作集”存储桶中?(我没有找到任何允许覆盖此电源管理功能的权限或类似权限。)

更具体地说,我有一个PeriodicWorkRequest必须每 30 分钟运行一次,灵活性为 10 分钟。但是,如果我了解强加的电源限制表,如果我的应用程序被放入“稀有”存储桶,则此类工作请求最多可以推迟 24 小时。(在幕后,Work 库使用作业调度程序。)

情景的更多细节

该应用程序对安全至关重要,不适合公共使用,但仅对有限的用户有意义。但是,如果其他人使用此应用程序,不会发生任何不好的事情,但该应用程序对他/她没有任何作用。

更准确地说,该应用程序连接到特定建筑物的中央火警站。所有员工都被要求在他们的智能手机上安装该应用程序。如果该建筑物的中央火灾报警站检测到事件,它会向所有注册的智能手机发送推送通知(通过 FCM),并且该应用程序会播放警报声。这意味着(希望)很长一段时间内没有任何事情发生,并且用户无意以任何方式与应用程序进行交互。该应用程序本身不提供任何交互,它仅说明当前状态(即绿色“OK”标志或红色“ALERT”标志)并在其余时间在后台等待。

由于应用程序对安全至关重要,因此必须检测应用程序与服务器断开连接的故障情况。为此,服务器实际上在后台发送消息周期性,即序列idleidleidleidlealarmalarmalarmalarmidleidleidle,...通常情况下,消息被广播低FCM优先级,每5分钟。如果状态发生变化,则会立即发送具有高 FCM 优先级(cp. 粗体字母)的附加消息。

该应用程序使用PeriodicWorkRequest上述问题中提到的方法实现了一个看门狗。这个看门狗有双重作用:唤醒设备并使设备接收所有(低优先级)已被推迟的 FCM 消息,然后检查最近的消息是否不超过 1.5*5 分钟。如果失败,应用程序会尝试向服务器重新注册自己,并等待状态消息开始再次传入。如果这也失败了,应用程序会向用户发出警告。

到目前为止一切正常。唯一的问题是新的电池优化,它会在某个时间点减慢看门狗的速度。当然,我可以制定一个常设规定,强制所有员工不时打开应用程序并简单地查看它,但这有点愚蠢。

我可以重新表述上面的问题:我完全理解为什么 Android 将电池优化推向了边缘。有很多(疯狂的)应用程序误用了周期性任务,目的是本应以不同的方式解决。并且网络上仍然充斥着“愚蠢”的编程建议,例如每 5 秒检查一次特定网页的修改情况。但是,如果电池优化越来越成为一个障碍,我如何期望编写需要看门狗用于合法目的的安全关键应用程序。谷歌的规则“如果用户不使用你的应用程序,这对他/她来说显然不重要”在这里并不适用。

android background-process power-management android-powermanager

5
推荐指数
1
解决办法
3065
查看次数

如何以编程方式确定 Android 应用程序是否在 Samsung Galaxy 上进入睡眠状态?

三星 Galaxy 具有让应用程序进入睡眠状态的功能 - 据我了解,这与应用程序的电池优化不同。

我需要以编程方式检查应用程序是否配置为睡眠状态,以便我可以正确地警告用户这一点以及后台任务无法运行的事实。

我知道PowerManager.isIgnoringBatteryOptimizations()这似乎与是否让应用程序进入睡眠状态无关。

android powermanager android-powermanager

5
推荐指数
1
解决办法
2324
查看次数

当设备休眠时,服务进入待机状态 - Android

Envrionment:Eclipse
语言:Java(Android)

我有一个问题,直到我在设备上测试我的应用程序之前我才意识到这一点.我一直以为即使手机正在睡觉,服务也会在后台持续运行.我发现事实并非如此,所以,我的问题是,一旦你唤醒你的设备,服务会再次启动吗?如果没有,我将如何使服务再次启动.

我能每隔5分钟左右唤醒一次电话,只是为了运行我的服务,这将持续30秒到1分钟.然后让手机重新入睡?

提前致谢.

编辑:我是Android编程的新手,如果有人告诉我如何使用WakefulIntentService,我将非常感激.我有一项服务,每隔一段时间都在搜索用户的GPS位置,当手机进入睡眠状态时,我希望我的服务仍然能够找到他们的位置.我将如何使用WakefulIntentService?我能在这种情况下使用它吗?

谢谢.

android android-wake-lock android-powermanager sleep-mode

4
推荐指数
1
解决办法
5889
查看次数