Android 4.1及以上版本如何关闭飞行模式?

4

我需要在我的展示应用中禁用飞行模式,我尝试了下面的代码片段来覆盖设备设置

try {
    int airplane = Settings.System.getInt(getApplicationContext().getContentResolver(), "airplane_mode_on");
    if (airplane == 1) {
        getApplicationContext().sendBroadcast(new Intent("android.intent.action.AIRPLANE_MODE").putExtra("state", false));
    }
} catch (SettingNotFoundException e) {
    e.printStackTrace();
}

这段代码似乎可以在Android 4.0版本及以下版本正常工作,但在4.1及以上版本中无法运行。我希望通过对设备进行root操作以访问系统设置来使其正常工作。 实际上,我的任务是从Nexus平板电脑的状态栏中禁用飞行模式功能。请告诉我如何实现这些功能的任何建议。


@JeanHominal,是的...它总是需要处于禁用状态。一旦用户从状态栏托盘启用飞行模式,它就需要处于禁用状态。就像Google Play商店中提供的Surelock应用程序一样。 - Senthil Mg
1个回答

2

对于Android版本<=4.1:

static boolean getAirplaneMode(Context context)
{
   return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0;
}


static void setAirplaneMode(Context context, boolean mode)
{
   if (mode != getAirplaneMode(context))
   {
      Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, mode ? 1 : 0);
      Intent newIntent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
      newIntent.putExtra("state", mode);
       context.sendBroadcast(newIntent);
    }
}

针对Android 4.2,请参考此处来修改AIRPLANE_MODE_ON(飞行模式)。


谢谢你的回答,我在4.1及以下版本上尝试了相同的操作,效果非常好。但是在4.2版本上却无法正常工作。我认为我们可能需要先对设备进行root操作才能访问系统级别的设置。不过,在不对4.2设备进行root操作的情况下是否有可能实现呢? - Senthil Mg
请使用以下链接查看我的答案,了解如何解决已获取root权限的Android 4.2设备的问题。如果我的答案对您有帮助,请接受它。 - j.holetzeck
只有已经root的设备才能在4.2+版本上更改设备设置,是吗? - Senthil Mg
重点是应用需要在4.2上写入“Settings.Global”的特权。这可以通过将应用程序复制到“/ system / app”文件夹中来完成,而此部分需要具有root权限的设备。仅有root权限的设备是不够的! - j.holetzeck
@j.holrtzeck,我已经成功地在Android 4.2及以下版本上禁用了飞行模式。但是,在Android 4.3上,即使应用程序移动到系统应用程序中,尝试切换飞行模式时,上述代码会抛出“权限被拒绝”的异常。我需要您的建议来解决这个问题。 - Senthil Mg

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