0

私はJavaを初めて使用し、現在プロジェクトに取り組んでいます。Bluetoothに慣れようとしています。これまでのところ、アプリ内からBluetoothのオンとオフを切り替えることができました。私が抱えている問題は、アクションが実行された後、画面が更新されないことです。たとえば、Bluetoothをオンにするとオンになりますが、電話を裏返すまでテキストビューのテキストは更新されません。切断したときも同じです。これが私のコードです

package com.example.bluetooth;

 import android.os.Bundle;
 import android.app.Activity;
 import android.bluetooth.BluetoothAdapter;
 import android.view.Menu;
 import android.view.View;
 import android.widget.Button;
 import android.widget.TextView;


 public class MainActivity extends Activity {


BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
Button button;
TextView update;
CharSequence enabled = "Bluetooth Enabled";
CharSequence disabled = "Bluetooth disabled";
CharSequence connect = "Connect";
CharSequence disconnect = "Disconnect";

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

    setUp();
    action();
    }

private void action() {
    if (button.getText() == connect) {
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                btAdapter.enable();

            }
        });
    }

    if (button.getText() == disconnect) {
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                btAdapter.disable();

            }
        });
    }

}

private void setUp() {
    button = (Button) findViewById(R.id.button1);
    update = (TextView) findViewById(R.id.textView1);



    button = (Button) findViewById(R.id.button1);
    if (btAdapter.isEnabled()) {

        update.setText("Bluetooth is enabled");
        button.setText(disconnect);

    }

    else {

        update.setText("Bluetooth is disabled");
        button.setText(connect);


    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

どんな助けでもいただければ幸いです。ありがとうございました。

4

1 に答える 1

1

私が間違っていると思う2つのこと:

  1. アクティビティの作成ごとに1回だけ呼び出されるため、TextView(setIp())の更新を担当するメソッドを1回だけ呼び出しています。onCreate()アダプタのオン/オフはUIスレッドの外部で行われるため、を作成しBroadcastReceiverてリッスンし、BluetoothAdapter.ACTION_STATE_CHANGEDそれに応じて更新する必要があります。
  2. CharSequencesをと比較してい==ます。代わりに文字列を使用してから使用する必要があり.equals()ます。これにより、詳細な比較が保証されます。型宣言を変更する必要があるのは、の.toString()後に追加することだけですgetText()。例えばbutton.getText().toString()

編集:単純な(しかし厄介な)解決策は、レシーバーを動的に作成して登録することです。さて、以前と同じように、電話をかける必要があるのは1回だけであることに注意してくださいsetUp()。以下のコードのようなものが機能する可能性があります。

public class MainActivity extends Activity {


  BluetoothAdapter btAdapter;
  Button button;
  TextView update;
  String enabled = "Bluetooth Enabled";
  String disabled = "Bluetooth disabled";
  String connect = "Connect";
  String disconnect = "Disconnect";
  BroadcastReceiver receiver;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btAdapter = BluetoothAdapter.getDefaultAdapter();
    setUp();
    action();
  }

  @Override
  public void onPause()
  {
    try{
      unregisterReceiver (receiver);
    }
    catch (NullPointerException e)
    {
      e.printStackTrace();
    }
    catch (IllegalStateException ie)
    {
      ie.printStackTrace();
    }
    super.onPause();
  }

  private void action() {
  button.setOnClickListener(new View.OnClickListener (){

    @Override
    public void onClick(View v) {
        if (btAdapter.isEnabled())
            btAdapter.disable();
        else
            btAdapter.enable();

    }

  });

 }

  private void setButtonText ()
  {
    if (btAdapter.isEnabled()) {       
      update.setText("Bluetooth is enabled");
      button.setText(disconnect);
    }

    else {

      update.setText("Bluetooth is disabled");
      button.setText(connect);
    }
  }
  private void setUp() {
    button = (Button) findViewById(R.id.button1);
    update = (TextView) findViewById(R.id.textView1);
    setButtonText();

    receiver = new BroadcastReceiver(){

      @Override
      public void onReceive(Context context, Intent intent) {
        setButtonText();

      }

    };

    IntentFilter filter = new IntentFilter (BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver (receiver, filter);

  }
}
于 2013-02-18T00:06:22.963 に答える