Android 6和7有一些功耗优化(打盹模式),在不使用设备时限制应用程序网络.
用户可以在电池设置中禁用任何应用的优化模式:
是否可以检查是否为我的应用启用了优化?我需要让用户禁用优化以获得更好的应用功能,但我不知道如何以编程方式检查它.
为了创建一个接收器,我WakefulBroadcastReceiver在我的旧项目中进行了扩展.但现在是deprecated.而不是WakefulBroadcastReceiver它Receiver,我应该现在使用以及如何将下面的代码转换的新方法?
这是我的代码:
public class TaskFinishReceiver extends WakefulBroadcastReceiver {
private PowerManager mPowerManager;
private PowerManager.WakeLock mWakeLock;
@Override
public void onReceive(Context context, Intent intent) {
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
turnOnScreen();
Intent wakeIntent = new Intent();
wakeIntent.setClassName("com.packagename", "com.packagename.activity.TaskFinished");
wakeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(wakeIntent);
}
public void turnOnScreen(){
mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
mWakeLock.acquire();
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在使用以下引用的代码来对警报通知活动进行唤醒锁定.但是,SCREEN_DIM_LOCK已经折旧了.那么,我应该用它替换它?
//Instance of wake lock for AlarmActivity
PowerManager pm = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "MyWakeLock");
Run Code Online (Sandbox Code Playgroud) 我正在创建一个Android应用程序,需要重启手机或单击按钮时关闭.这可能吗?或者手机是否需要root访问权限?
我目前正在实现一项功能,要求用户忽略应用程序的电池优化.这样做的原因是,应用程序的主要功能不幸受到省电模式的严重影响.
为了实现我的目标,我通过创建Intent和设置Actionto来提示用户ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS.
虽然在发射之前Intent,我都检查isPowerSaveMode()并isIgnoringBatteryOptimizations()确保在没有启用省电模式时不提示用户; 这是该功能的要求.我这样做的方式是:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isPowerSaveMode = pm.isPowerSaveMode(); // always returns false for Huawei devices
Run Code Online (Sandbox Code Playgroud)
这适用于大多数设备,但对于华为设备,isPowerSaveMode()始终返回false.因此,由于前提条件失败,因此永远不会显示提示.
还有其他人可能遇到过这个问题吗?如果是这样,你做了什么来解决它?
需要注意的是,Xamarin.AndroidSDK中也存在同样的问题.
我有这个代码:
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
Run Code Online (Sandbox Code Playgroud)
它FULL_WAKE_LOCK被划掉了,它说"PowerManger.FULL_WAKE_LOCK已被弃用".代码正在运行.但究竟是什么意思呢?它能引起任何问题吗?
我的一位朋友最近继承了一台旧笔记本电脑,刚刚安装了Windows 7,并希望延长电池续航时间.最初电池持续约20分钟,但通过手动让电池完全放电再充电几次,他已设法将电池寿命延长到一个小时左右.我们认为看到我们可以提高电池性能的程度会很有趣!我想写一个脚本让电池在一夜之间循环 - 这对于偶尔在任何一台电脑上运行来维持电池健康状况可能会有用吗?我可以获得电池状态,但无法看到如何指示笔记本电脑忽略交流电源线的存在并使用电池.我有一种感觉答案就在那里:https: //pypi.python.org/pypi/LaptopControlPanel但我对我的理解完全达到极限!任何帮助都会很棒.
import ctypes
from ctypes import wintypes
class SYSTEM_POWER_STATUS(ctypes.Structure):
_fields_ = [
('ExternalPower', wintypes.BYTE),
('BatteryFlag', wintypes.BYTE),
('BatteryLifePercent', wintypes.BYTE),
('Reserved1', wintypes.BYTE),
('BatteryLifeTime', wintypes.DWORD)
]
SYSTEM_POWER_STATUS_P = ctypes.POINTER(SYSTEM_POWER_STATUS)
GetSystemPowerStatus = ctypes.windll.kernel32.GetSystemPowerStatus
GetSystemPowerStatus.argtypes = [SYSTEM_POWER_STATUS_P]
GetSystemPowerStatus.restype = wintypes.BOOL
status = SYSTEM_POWER_STATUS()
if not GetSystemPowerStatus(ctypes.pointer(status)):
raise cytpes.WinError()
print 'ExternalPower', status.ExternalPower
#print 'BatteryFlag', status.BatteryFlag
print 'BatteryLifePercent', status.BatteryLifePercent
print 'BatteryLifeTime', status.BatteryLifeTime
if status.ExternalPower == True and status.BatteryLifePercent == 100:
print 'Connected to mains and at 100% charge: Begining decharge' …Run Code Online (Sandbox Code Playgroud) 在Android开发板上,我试图根据GPIO上收到的中断唤醒AP,任何人都可以帮我这个吗?
我对此的理解是:
我们需要创建一个输入设备,并根据收到的中断向该设备更新事件.然后从应用程序我相信操作系统将发送事件发生通知,然后我们需要使用唤醒锁唤醒AP.
如果我的理解是正确的,请告诉我?如果是,那么你能告诉我需要注册哪种输入设备(EV_PWR,EV_KEY ..),应用程序将如何获得通知,我们可以从驱动程序中唤醒AP吗?
三星 Galaxy 具有让应用程序进入睡眠状态的功能 - 据我了解,这与应用程序的电池优化不同。
我需要以编程方式检查应用程序是否配置为睡眠状态,以便我可以正确地警告用户这一点以及后台任务无法运行的事实。
我知道PowerManager.isIgnoringBatteryOptimizations()这似乎与是否让应用程序进入睡眠状态无关。
以前,使用以下组件之一的意图会引导我进入华为的系统设置以更改应用程序的自动启动行为。
ComponentName(
"com.huawei.systemmanager",
"com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity"
),
ComponentName(
"com.huawei.systemmanager",
"com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity"
)
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.huawei.systemmanager/.startupmgr.ui.StartupNormalAppListActivity } from ProcessRecord{34a529e 19272:com.mk...test/u0a733} (pid=19272, uid=10733) requires com.huawei.permission.external_app_settings.USE_COMPONENT
at android.os.Parcel.createException(Parcel.java:2071)
at android.os.Parcel.readException(Parcel.java:2039)
at android.os.Parcel.readException(Parcel.java:1987)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3888)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1738)
at androidx.test.runner.MonitoringInstrumentation.execStartActivity(MonitoringInstrumentation.java:545)
at android.app.ContextImpl.startActivity(ContextImpl.java:1049)
at android.app.ContextImpl.startActivity(ContextImpl.java:1005)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at androidx.test.internal.runner.junit4.statement.RunBefores.evaluate(RunBefores.java:80)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at …Run Code Online (Sandbox Code Playgroud) android power-management android-intent powermanager huawei-mobile-services
powermanager ×10
android ×9
battery ×1
batterylevel ×1
linux-kernel ×1
python ×1
receiver ×1
wakelock ×1