在root环境下使用shell命令调用飞行模式

在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环境才能使用

你可能感兴趣的:(在root环境下使用shell命令调用飞行模式)