0

私は 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;
}

}

ここでの問題は、私の電話が機内モードになり、元に戻ることです。しかし、このプロセスを止めることはできません。同じメソッド (toggleAirplaneMode) を 2 回呼び出して OnClick リスナーを処理した方法に問題がありますか?

よろしく、

4

4 に答える 4

2

この回答には、これを行うために必要なコードが含まれています。また、WRITE_SETTINGS 権限があることも確認してください。

機内モードの制御から適応:

// 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);
于 2013-08-13T11:40:37.190 に答える
0

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();
                }

ボタンをクリックするたびに、airplaneMode が切り替わります。うまくいかない場合は、削除してみてください!

于 2013-08-13T11:38:36.317 に答える
0

やっと手に入れた

私は自分のコードでこれを使用しました

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

そして、最終的な int STATE_IN_SERVICE = 0; を宣言しました。OnCreateの前。ser は ServiceState のインスタンスです。

返信ありがとうございます。

于 2013-08-14T05:22:20.190 に答える