这些天,因为做一个脚本,需要用到系统权限,我们知道app在没有Root情况下
是无法使用系统功能的 ,我这里需要用到
自动切换飞行模式,打开热点, 这里面涉及到系统权限 AIRPLANE_MO,
始终报这样的错误:java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.AIRPLANE_MODE from pid=25190, uid=10081,
后来查看了系统源码 ,终于发现了端倪,原来AIRPLANE_MODE_ON 从Setting.System下移到了Settings.Global下。
所以在4.2以上的版本app没有权限修改Setting.Global的,解决的办法就是把应用放到源码中去编译,
并且加上
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>权限。
android系统就不允许app调用 飞行模式 开关 。使用 代码
public static void openAirplaneModeOn(Context context, boolean enabling) {
Settings.Global.putInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, enabling ? 1 : 0);
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", enabling);
context.sendBroadcast(intent);
}
这个代码测试是完全OK的,但是手机必须ROOT ,
接下来记录下过程
首先下载线刷包,我这里用的是线刷,机刷貌似试了下不行 。
线刷 根据自己的型号 ,下载 ,我的是小米5s
http://www.miui.com/shuaji-393.html
这里面有两个版本 开发版有ROOT ,如果你要改造机器,一定要选择开发版本 ,而不是稳定版本
对应工具在上面的页面也可以找到,自行下载
下载完成后 ,关闭手机 ,然后按住电源+减音量键 ,进入fastboot 模式
将线刷包解压出来
刷机成功后,在电脑端 通过ADB 命令查看 是否具有ROOT命令
执行adb shell su 命令 出现#号 ,说明你手机是有root权限的 ,但是 我们用 re文件浏览器查看,会发现
system权限怎么都是只读 ,无法修改成 可写 模式 ,这个主要是小米的系统是残废版本ROOT
不让改System权限 ,这个时候还需要进一步操作 。
执行以下几个命令
adb root
adb disable-verity
adb reboot
然后 手机那边 安装 Root Explorer文件管理工具
将app 丢到System/app目录下,这样就能够像系统应用一样 ,操作系统功能了 。
小米5s miui 10 测试成功