отключить режим полета на андроиде

Я хотел бы отключить режим полета, если число> 50, я реализовал этот код (из Переключить самолет режим в Android), но при выполнении я закрываю принудительно, может ли кто-нибудь помочь здесь?

                if(num>50){
                    // read the airplane mode setting
                    boolean isEnabled = Settings.System.getInt(
                          getContentResolver(), 
                          Settings.System.AIRPLANE_MODE_ON, 0) == 1;

                    // toggle airplane mode
                    Settings.System.putInt(
                          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);



                }

в порядке. Я реализовал предчувствия, но я хотел бы изменить оператор if:

if num>=50 and airplane mode=on toggle it off 
if  airplane mode=off and num<50 toggle it on

Может ли кто-нибудь помочь мне написать новый код? (я новичок)


person rami    schedule 15.08.2011    source источник
comment
будьте круты и принимайте ответы на ваши вопросы, которые вам помогли!!!   -  person evilone    schedule 15.08.2011


Ответы (3)


Вы, скорее всего, не добавили WRITE_SETTING разрешений в свой AndroidManifest.xml:

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

Также обратите внимание на этот код:

 Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
 intent.putExtra("state", !isEnabled);
 sendBroadcast(intent);

Не должно работать, потому что согласно документации на ACTION_AIRPLANE_MODE_CHANGED:

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

И хотя в настоящее время вы можете отправлять эту трансляцию без разрешений системы, это может измениться в будущих выпусках Android.

person inazaruk    schedule 15.08.2011

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

Посмотрите здесь Переключить режим полета в Android

person Jan    schedule 15.08.2011

См. следующий код:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    IntentFilter intentFilter = new IntentFilter("android.intent.action.SERVICE_STATE");

    BroadcastReceiver receiver = new BroadcastReceiver() {
          @Override
          public void onReceive(Context context, Intent intent) {
                Log.d("AirplaneMode", "Service state changed");
                Toast.makeText(getApplicationContext(), "Service state changed", Toast.LENGTH_LONG).show();
                boolean isEnabled = isAirplaneModeOn(context);
            /*   setSettings(context, isEnabled?1:0);
                Intent intent_mode = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
               intent_mode.putExtra("state", !isEnabled);
                context.sendBroadcast(intent_mode);*/

                if(isEnabled==true)
                { setSettings(context, isEnabled?1:0);
                    Toast.makeText(getApplicationContext(), "Flight mode on", Toast.LENGTH_LONG).show();
                    Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0);
                    Intent newIntent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
                    newIntent.putExtra("state", false);
                    sendBroadcast(newIntent);
                }
                else
                { setSettings(context, isEnabled?1:0);
                    Toast.makeText(getApplicationContext(), "Flight mode off", Toast.LENGTH_LONG).show();
                }

          }

        @SuppressLint("NewApi")
        private void setSettings(Context context, int value) {
            // TODO Auto-generated method stub

            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
                Settings.System.putInt(
                          context.getContentResolver(),
                          Settings.System.AIRPLANE_MODE_ON, value);
            } else {
                Settings.Global.putInt(
                          context.getContentResolver(),
                          Settings.Global.AIRPLANE_MODE_ON, value);
            }       

        }

        @SuppressLint("NewApi")
        public boolean isAirplaneModeOn(Context context) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
            return Settings.System.getInt(context.getContentResolver(), 
                    Settings.System.AIRPLANE_MODE_ON, 0) != 0;          
        } else {
            return Settings.Global.getInt(context.getContentResolver(), 
                    Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
        }       
    }
    };

    registerReceiver(receiver, intentFilter);


}

//permissions needed:

// //

person Harshal Benake    schedule 31.12.2013
comment
Опишите, какие изменения вы внесли? - person Avijit; 31.12.2013
comment
во-первых, используйте широковещательный приемник, чтобы он работал в фоновом режиме... затем просмотрите метод setSettings(), который используется для проблем, связанных с версией... и IntentFilterantentFilter = new IntentFilter(android.intent.action.SERVICE_STATE); это важная часть... дайте мне знать, если на ваш вопрос будет дан ответ... - person Harshal Benake; 31.12.2013