android - 如何为我的根应用程序获得限制广播等特权?
问题描述
如何在 android 8+ 之后使用 root 命令使我的应用程序获得受限广播。
每次用户将设备连接到充电器或断开设备连接时,我都想敬酒。我已经尝试过 JobScheduler,但它似乎无法正常工作。
解决方案
监控充电状态变化。
充电状态可以轻松更改(插入/移除充电器),因此监控充电状态和更改刷新率非常重要。
当充电状态发生变化时,BatteryManager 会发送一个广播。即使应用程序未运行,接收这些事件也很重要,因为您可能需要在后台启用更新服务。因此,您需要在Androidmanifest.xml 文件中注册广播接收器并添加两个动作:ACTION_POWER_CONNECTED
和ACTION_POWER_DISCONNECTED
过滤。
示例代码:
<receiver android:name=".PowerConnectionReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
在相关的广播接收器实现中,您可以读出当前的充电状态。
示例代码:
public class PowerConnectionReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
}
}
推荐阅读
- proxy - 如何抑制代理链消息
- jenkins-pipeline - 为什么 Jenkins 使用正确的 AWS CLI 语法标记错误?
- parallel-processing - 使用并行执行时 Fortran 循环崩溃
- rust - 无法在迭代器上的 for 循环中移出借用的内容
- oracle - 如果我正在搜索的变量不存在的 if 语句?
- javascript - 跨域上传图片
- java - OWL API 无法解析的 YAGO 本体
- python - 使用朴素贝叶斯获取 TF/Count 向量
- java-8 - CompletableFuture 如何在 play 框架中向客户端返回结果
- python - 如何通过python在命令提示符中设置变量?