Rup*_*ali 7 android android-6.0-marshmallow
一旦设备进入打盹模式,第三方应用程序是否可以获得操作?
尝试注册广播接收器以执行以下操作,
<receiver android:name="com.doze.sample.DozemodeReceiver" android:enabled="true">
<intent-filter>
<action android:name=" android.os.action.DEVICE_IDLE_MODE_CHANGED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
它不起作用(接收器没有被调用).
zma*_*ies 12
要确认评论中提到的内容,android.os.action.DEVICE_IDLE_MODE_CHANGED通过AndroidManifest.xml 定义广播接收器无效.
注册接收器的唯一方法是动态执行:
IntentFilter filter = new IntentFilter();
filter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
context.registerReceiver(new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
onDeviceIdleChanged();
}
}, filter);
Run Code Online (Sandbox Code Playgroud)
van*_*art 10
基于@zmarties提供的完美答案,以下是完整的解决方案:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
BroadcastReceiver receiver = new BroadcastReceiver() {
@RequiresApi(api = Build.VERSION_CODES.M) @Override public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm.isDeviceIdleMode()) {
// the device is now in doze mode
} else {
// the device just woke up from doze mode
}
}
};
context.registerReceiver(receiver, new IntentFilter(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED));
}
Run Code Online (Sandbox Code Playgroud)
如果您能够检查上下文何时被销毁(例如在活动或服务中),请调用此方法以避免资源泄漏:
context.unregisterReceiver(receiver);
Run Code Online (Sandbox Code Playgroud)
要测试这段代码,请使用以下命令:
adb shell dumpsys deviceidle force-idle
Run Code Online (Sandbox Code Playgroud)
将设备置于打盹模式,
adb shell dumpsys deviceidle step
Run Code Online (Sandbox Code Playgroud)
从Doze中唤醒设备.
| 归档时间: |
|
| 查看次数: |
5301 次 |
| 最近记录: |