当前位置:首页 > 行业动态 > 正文

安卓关机监控

安卓关机由系统广播触发,服务处理关闭应用及进程后断电,第三方应用仅能通过监听广播或Accessibility服务实现部分监控,受限于系统权限,无法完全拦截,需系统级权限支持

安卓关机监控的难点

  1. 系统限制
    安卓系统在关机时会强制终止所有第三方应用进程,普通应用无法直接监听关机事件。

  2. 广播限制
    系统关机广播(如Intent.ACTION_SHUTDOWN)属于系统级广播,普通应用无法通过静态注册接收,需动态注册且需系统权限。

  3. 权限限制
    监听关机事件需android.permission.SHUTDOWN权限,该权限仅系统应用可用。


实现关机监控的可能方案

通过系统广播监听(需特权)

方法 说明
ACTION_SHUTDOWN 系统关机时触发,需动态注册且需SHUTDOWN权限(仅限系统应用)。
ACTION_REBOOT 设备重启时触发,同样需特权权限。

示例代码(需系统权限)

安卓关机监控  第1张

// 动态注册广播接收器
IntentFilter filter = new IntentFilter(Intent.ACTION_SHUTDOWN);
context.registerReceiver(new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 处理关机逻辑
    }
}, filter);

利用设备管理器(DeviceAdmin)

通过DeviceAdminReceiver监听设备关闭事件,需用户手动激活设备管理器权限。

步骤

  1. 定义DeviceAdminReceiver
    public class MyDeviceAdminReceiver extends DeviceAdminReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_SHUTDOWN)) {
                // 处理关机逻辑
            }
        }
    }
  2. AndroidManifest.xml中声明:
    <receiver android:name=".MyDeviceAdminReceiver"
              android:permission="android.permission.BIND_DEVICE_ADMIN">
        <meta-data android:name="android.app.device_admin" />
        <intent-filter>
            <action android:name="android.intent.action.DEVICE_ADMIN_SHUTDOWN" />
        </intent-filter>
    </receiver>
  3. 引导用户激活设备管理器。

Root权限或系统应用

将应用植入系统分区(如/system/priv-app),赋予系统权限后可直接监听关机广播。

安卓关机监控  第2张


注意事项

  1. 兼容性问题
    不同安卓版本和厂商定制系统可能限制关机广播的监听(如MIUI、EMUI)。

  2. 隐私风险
    使用设备管理器或Root权限可能被用户视为侵犯隐私,需明确告知用途。

  3. 替代方案
    若仅需感知设备断电,可间接监听电池电量极低状态(BATTERY_LOW广播),但非精确关机事件。

    安卓关机监控  第3张


相关问题与解答

问题1:普通应用如何感知设备即将关机?

解答
普通应用无法直接监听ACTION_SHUTDOWN广播,可尝试以下替代方案:

  • 监听ACTION_BATTERY_CHANGED广播,检测电量低于阈值(如5%)时触发逻辑。
  • 引导用户手动启用设备管理器权限,通过DeviceAdminReceiver间接感知关机。

问题2:安卓12及以上版本如何实现关机监控?

解答
安卓12进一步限制后台行为,需满足以下条件:

  1. 应用需为系统应用(安装在/system/priv-app)。
  2. 动态注册广播接收器并声明SHUTDOWN权限。
  3. 部分厂商可能屏蔽系统广播,需针对特定设备测试兼容性
0