【问题标题】:Enable and Disable Airplane Mode successively Android依次启用和禁用飞行模式 Android
【发布时间】:2013-08-13 11:34:32
【问题描述】:

我只是 Android 的初学者。我有一个带有按钮的 Android 代码。单击按钮后,它应该调用 AirPlane 模式,然后再次返回正常模式。这是我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // load controls
    tvStatus = (TextView)findViewById(R.id.tvStatus);
    togState = (Button)findViewById(R.id.togState);

    // set click event for button
    togState.setOnClickListener(new OnClickListener() {                     
                    @Override
                    public void onClick(View v) {
                            // check current state first
                            boolean state = isAirplaneMode();
                            // toggle the state
                            toggleAirplaneMode(state);

                            state = isAirplaneMode();
                            // toggle the state
                            toggleAirplaneMode(state);

                    }
            });
}

public void toggleAirplaneMode(boolean state) {
    // toggle airplane mode
    Settings.System.putInt(this.getContentResolver(),Settings.System.AIRPLANE_MODE_ON, state ? 0 : 1);

    // broadcast an intent to inform
    Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
    intent.putExtra("state", !state);
    sendBroadcast(intent);
}



public boolean isAirplaneMode() {
    return Settings.System.getInt(this.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) == 1;
}

}

这里的问题是,我的手机会进入 AirPlane 模式,它也会切换回来。但这个过程我无法停止。我通过两次调用相同的方法(toggleAirplaneMode)来处理 OnClick 侦听器的方式有问题吗?

问候,

【问题讨论】:

    标签: android android-intent airplane


    【解决方案1】:

    This answer 包含执行此操作所需的代码。还要确保您拥有 WRITE_SETTINGS 权限。

    改编自Controlling Airplane Mode:

    // 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);
    

    【讨论】:

    • 感谢 ajent451。我也参考了相同的链接。但我想在一个按钮单击中连续两次切换。
    • 我找到了解决方案,它奏效了。已经在下面回答了。
    【解决方案2】:

    onClick 方法替换为:

                    public void onClick(View v) {
                            // check current state first
                            boolean state = isAirplaneMode();
                            // toggle the state
                            final Handler handler = new Handler(){
                                @Override
                                public void handleMessage(Message msg) {
                                    toggleAirplaneMode(!state);
                                    super.handleMessage(msg);
                                }       
                            };
                            Thread th = new Thread() {
                               @Override
                               public void run() {
                                  toggleAirplaneMode(!state);
                                  handler.sendEmptyMessage(0);
                               };
                            };
                            th.start();
                    }
    

    每次单击按钮时,它都会切换飞机模式。 如果不起作用,请尝试删除!

    【讨论】:

    • 它会调用飞行模式,然后单击按钮调用普通模式吗?
    • 我的意思是我只想点击一次。我需要调用飞行模式,然后通过单击按钮一次返回正常模式。答案一中的代码通过单击按钮进入飞行模式,但如何返回正常模式?
    • 第一次点击会进入飞行模式。在第二次点击时,它将进入正常模式。
    • 您想一键同时完成这两项操作吗?
    • 是的@micro.pravi .. 同时.. 首先它应该切换到飞行模式然后回到正常模式。我想避免两次点击。
    【解决方案3】:

    终于明白了

    我在我的代码中使用了这个

                public void onClick(View v) {
                    // check current state first
                    boolean state = isAirplaneMode();
                    // toggle the state
                    toggleAirplaneMode(state);
    
                   state = isAirplaneMode();
                    // toggle the state
                    toggleAirplaneMode(state);
                    ser = new ServiceState();
                    ser.setState(STATE_IN_SERVICE);
                   }
    

    我已经声明了 final int STATE_IN_SERVICE = 0;在 OnCreate 之前。 ser 是 ServiceState 的实例。

    感谢您的回复。

    【讨论】:

    • 原来是不能开-关飞行模式,只是关了sim卡,但是再点击之后就看不到sim卡了,怎么解决??
    • 你好 nikiIgeniusDev。我在下面发布我的整个代码。检查出来。
    【解决方案4】:

    检查一下...这可能会有所帮助..

    公共类 MainActivity 扩展 Activity { 上下文上下文;

    private void changeRadioComponentEnabled(Context paramContext, String paramString, boolean paramBoolean1, boolean paramBoolean2)
      {
        boolean bool = false;
        ContentResolver localContentResolver = paramContext.getContentResolver();
        int i;
        if (!paramBoolean1)
          i = 1;
        else
          i = 0;
        Settings.System.putInt(localContentResolver, "airplane_mode_on", i);
        Settings.System.putString(paramContext.getContentResolver(), "airplane_mode_radios", paramString);
        Intent localIntent = new Intent("android.intent.action.AIRPLANE_MODE");
        if (!paramBoolean1)
          bool = true;
        localIntent.putExtra("state", bool);
        paramContext.sendBroadcast(localIntent);
        if (!paramBoolean2)
        {
          if (paramString.indexOf("cell") == 0)
            Settings.System.putString(paramContext.getContentResolver(), "airplane_mode_radios", "cell");
        }
        else
          Settings.System.putString(paramContext.getContentResolver(), "airplane_mode_radios", "cell,bluetooth,wifi,nfc");
      }
    
    
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        this.context = this;
        ((Button)findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener()
        {
          public void onClick(View paramAnonymousView)
          {
            MainActivity.this.changeRadioComponentEnabled(MainActivity.this.context, "cell", false, false);
          }
        });
    
        ((Button)findViewById(R.id.button2)).setOnClickListener(new View.OnClickListener()
        {
          public void onClick(View paramAnonymousView)
          {
              MainActivity.this.changeRadioComponentEnabled(MainActivity.this.context, "cell", true, false);
          }
        });
    
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-24
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多