如何将AIRPLANE_MODE_ON设置为“True”或ON?

4

我计划挂断电话,我发现这是其中一种解决方法。如何通过代码激活飞行模式?

这样,我将根据某个事件挂断电话。


2
请注意,自Android 4.2(Jelly Bean主要版本1)起,无法切换飞行模式。这是因为Google采用了一种“绷带”解决方案来解决Android的缺陷,而不是重新审查其安全模型。 - ChuongPham
4个回答

15

请参考博客文章Android: Controlling Airplane Mode

仅适用于API 16及以下版本。

// Toggle airplane mode.
Settings.System.putInt(
      context.getContentResolver(),
      Settings.System.AIRPLANE_MODE_ON, isEnabled ? 0 : 1);

// Post an intent to reload.
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", !isEnabled);
sendBroadcast(intent);

其中isEnabled表示飞行模式是否启用。


我无法部署它。这段代码放在Broadcastreceiver类中吗? - David Prun
1
它可以在您需要执行操作的任何地方运行。但是请不要忘记,您需要WRITE_SETTINGS权限才能这样做。 - Jess
我仍然会收到像“Settings.System无法解析”的错误。 - David Prun
1
请记住,在您的manifest.xml文件中需要添加 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 才能使此功能正常工作。 - Tommie
1
有没有其他的方法在4.2及以上版本中实现?我还没有找到方法。 - ransh

1

0
你可以这样做:
        int mode = isEnable ? 1 : 0;
        Runtime.getRuntime().exec("settings put global airplane_mode_on "+mode);
        SystemClock.sleep(2000);
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        intent.putExtra("state", isEnable);
        this.sendBroadcast(intent);

shell uid 可以更改 airplane_mode_on,但发送 ACTION_AIRPLANE_MODE_CHANGED 需要权限(需要系统 uid)

<uses-permission android:name="android.permission.WRITE_SETTINGS" />

0
  public static boolean getAirplaneMode(Context context) {
      try {
      int airplaneModeSetting = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON);
      return airplaneModeSetting==1?true:false;
    } catch (SettingNotFoundException e) {
      return false;
    }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接