проблема с использованием режима полета на Android - PullRequest
0 голосов
/ 11 января 2012

У меня проблема с использованием режима полета в моем приложении. Приложение отлично работает на моем эмуляторе, но не на моем реальном телефоне, когда я пробую свой 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 ]

2 голосов
/ 18 января 2012

Вы НЕ МОЖЕТЕ передавать намерения системного уровня.Это незаконно по стандартам Android.

Вместо того, чтобы пытаться отправить намерение, почему бы вам просто не реализовать широковещательный приемник для прослушивания этого конкретного действия, а затем, когда оно меняется, ваше приложение должно его обработать.Это был бы намного лучший подход.Вы не можете и не должны НЕ ожидать управления режимом полета, но ваше приложение может слушать, когда оно вызывается.Вы также можете извлечь свойство из системной базы данных, которое сообщит вам, находится ли оно в режиме полета.

Еще раз Не сосредотачивайтесь на попытке управлять им, просто обработайте его.

1 голос
/ 20 января 2012

Как легальное приложение для Android, вы не можете делать ничего из того, что пытаетесь сделать, в том числе переводить телефон в режим полета, отключать радио, отключать звук или что-либо в этом роде.

Представьте себе, какВы, пользователь, почувствуете, что если какое-то произвольное приложение выключит телефонную радиостанцию, и вы пропустите звонок, который сообщит вам о том, что вы выиграли миллион долларов.

Итак, что все пытаются получить, это то, что вы какприложение не должно ожидать перевода телефона в режим полета.Только пользователь может сделать это.

Теперь, если пользователь переходит в режим полета, система передает намерение, ваше приложение должно перехватить это намерение и действовать по нему.Действовать в соответствии с этим означает множество вещей, включая изменение вашего пользовательского интерфейса.

Даже если вы найдете способ достичь того, что вы пытаетесь сделать сегодня, система может измениться завтра без предупреждения (поскольку это внутренний API /Намерение), и ваше приложение не будет работать.Технически это может не работать ни на каком другом устройстве, кроме того, которое вы держите в руке, вы знаете всю хрень контрактов API.

0 голосов
/ 09 июля 2012
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;
    }
  }
0 голосов
/ 18 января 2012

Как вы сказали, ответ содержится в документации:

"Это защищенное намерение, которое может быть отправлено только системой."

Справочник по документации намерений

Он может работать на эмуляторе, потому что эмулятор не является защищенным устройством и позволяет вам делать вещи (например, просматривать файловую систему), которые вы обычно не могли бы сделать.Кроме того, вы не упомянули, какой уровень API Android вы пытаетесь использовать.Если это что-то актуальное, Google, возможно, ужесточил ограничение.

...