0

我有麻烦在我的应用程序上使用飞行模式。当我尝试我的 apk 时,该应用程序在我的模拟器上运行得很好,但在我的真实手机中却没有。

这是激活飞机的代码:

Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1);
        // Post an intent to reload
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        // send a broadcast
        //intent.putExtra("state", !isEnabled);
        intent.putExtra("state", true);
        sendBroadcast(intent);

要停用它:

Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0);
        // Post an intent to reload
        Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        // send a broadcast
        intent.putExtra("state", false);
        sendBroadcast(intent);

我读到我无法创建意图(android doc),但我看到有人可以制作飞行模式,所以我不明白!

感谢帮助我!

4

4 回答 4

2

不能广播系统级意图。按照android的标准,这是非法的。

与其尝试发送意图,不如实现一个广播接收器来收听该特定操作,然后当它发生变化时,让您的应用程序处理它。这将是一个更好的方法。您不能也不应该期望控制飞行模式,但您的应用程序可以在调用它时进行监听。您还可以从系统数据库中检索一个属性,告诉您它是否处于飞行模式。

再一次不要专注于试图控制它,只是处理它。

于 2012-01-18T07:23:03.520 回答
1

作为一个合法的安卓应用程序,你不能做任何你想做的事情,包括将手机调到飞行模式、禁用无线电、关闭声音或任何类似的事情。

想象一下,如果某个任意应用程序关闭了您的手机收音机,而您错过了通知您中奖一百万美元的电话,您作为用户的感受。

所以每个人都想知道的是,作为一个应用程序,你不应该期望将手机切换到飞行模式。只有用户可以这样做。

现在,如果用户更改为飞行模式,系统会广播一个 Intent,您的应用程序应该捕获该广播 Intent 并对其采取行动。采取行动意味着很多事情,包括改变你的用户界面。

即使您找到某种方法来实现您今天尝试做的事情,系统明天也可能会在没有警告的情况下更改(因为它是内部 API/Intent)并且您的应用程序将无法运行。从技术上讲,它可能无法在任何其他设备上运行,除了您手中的设备,您知道整个 API 合同都是废话。

于 2012-01-20T09:22:21.127 回答
0
public static void setWifiOn(Context context) {
      WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    manager.setWifiEnabled(true);
    }

  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;
    }
  }
于 2012-07-09T10:15:44.627 回答
0

正如您所说,答案在文档中:

“这是一个受保护的意图,只能由系统发送。”

意图文档参考

它可能在模拟器上工作,因为模拟器不是安全设备,它可以让你做一些你通常不能做的事情(比如浏览文件系统)。此外,您没有提及您尝试使用的 Android 的 API 级别。如果它是最新的,谷歌可能已经收紧了限制。

于 2012-01-18T06:57:42.477 回答