在root环境下使用shell命令调用飞行模式
- 1.声明需要使用的shell命令
private final static String COMMAND_AIRPLANE_ON = "settings put global airplane_mode_on 1 \n " +
"am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true\n ";
private final static String COMMAND_AIRPLANE_OFF = "settings put global airplane_mode_on 0 \n" +
" am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false\n ";
private final static String COMMAND_SU = "su";
- 2.执行命令的方法
/****
* 写入shell命令
* @param command
*/
public static void writeCmd(String command) {
try {
Process su = Runtime.getRuntime().exec(COMMAND_SU);
DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());
outputStream.writeBytes(command);
outputStream.flush();
outputStream.writeBytes("exit\n");
outputStream.flush();
try {
su.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
- 3.设置飞行模式
/**
*设置飞行模式
* @param isEnable true 开启 false 关闭
*/
public void setAirplaneModeOn(boolean isEnable) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
Settings.System.putInt(getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, isEnable ? 1 : 0);
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", isEnable);
sendBroadcast(intent);
} else //4.2或4.2以上
{
if (isEnable) {
new Thread(new Runnable() {
@Override
public void run() {
writeCmd(COMMAND_AIRPLANE_ON);
}
}).start();
} else {
new Thread(new Runnable() {
@Override
public void run() {
writeCmd(COMMAND_AIRPLANE_OFF);
}
}).start();
}
}
}
4.使用控件设置飞行模式
mBtnAir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mAirFlyingFlag) {
setAirplaneModeOn(false);//关闭
mAirFlyingFlag=false;
mBtnAir.setText("飞行模式:关");
} else {
setAirplaneModeOn(true);//开启
mAirFlyingFlag=true;
mBtnAir.setText("飞行模式:开");
}
}
});
使用魅族手机6.0的时候遇到个问题。使用shell命令更改飞行模式。获取当前是否开启飞行模式的时候会一直返回错误状态(使用shell命令前的状态)。所以状态标识使用自己的mAirFlyingFlag判断。
判断方法
/****
* 获取飞行模式状态
* @return
*/
public static boolean IsAirModeOn(Context context) {
return (Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) == 1 ? true : false);
}
注意:必须在root环境才能使用
网友评论