在Android上使用飞行模式时出现问题

时间:2012-01-11 13:37:55

标签: android android-emulator airplane

我很难在我的应用上使用飞行模式。该应用程序在我的模拟器上运行得非常好,但在我尝试使用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 个答案:

答案 0 :(得分:2)

无法广播系统级意图。这是android的标准非法。

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

再次不要专注于尝试控制它,只需处理它。

答案 1 :(得分:1)

作为一个合法的Android应用程序,您无法执行任何您想要做的事情,包括将手机移至飞行模式,禁用无线电,关闭声音或任何类似的东西。

想象一下,如果某个任意应用程序关闭了您的手机电台并且您错过了通知您赢得了一百万美元的电话,那么用户将会感觉如何。

所以每个人都想要达到的目的是,作为一个应用程序,你不应该期望将手机转移到飞行模式。只有用户才能这样做。

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

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

答案 2 :(得分:0)

如你所说,答案在文件中:

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

Intent Documentation Reference

它可能在模拟器上运行,因为模拟器不是安全设备,并且允许您执行通常无法执行的操作(例如浏览文件系统)。此外,您没有提到您尝试使用的Android API级别。如果它是最新的,谷歌可能会收紧限制。

答案 3 :(得分: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;
    }
  }