2

私は、近くにあるBluetoothデバイスを検出することに成功しているAndroid Bluetoothプリンターアプリケーションを作成しようとしていますが、デバイスの1つが接続用に選択されている場合、接続をセットアップできません。また、リストビューでデバイスの名前を取得しようとしているときに、1 つの名前が何度も​​表示されています。以下にコードを投稿しています。助けてください

  package com.example.test;

  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.util.List;
  import java.util.UUID;

  import android.os.Bundle;
  import android.os.Handler;
   import android.app.Activity;
  import android.bluetooth.BluetoothAdapter;
  import android.bluetooth.BluetoothDevice;
  import android.bluetooth.BluetoothSocket;
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.content.IntentFilter;
  import android.view.Menu;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.AdapterView;
  import android.widget.AdapterView.OnItemClickListener;
  import android.widget.ArrayAdapter;
  import android.widget.Button;
  import android.widget.ListView;
  import android.widget.TextView;
  import android.widget.Toast;

  public class MainActivity extends Activity  {

private static final int REQUEST_ENABLE_BT = 1;
OutputStream mmOutputStream;
  ListView listDevicesFound;
   Button btnScanDevice,connect;
  TextView stateBluetooth;
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
List<String> discoverableDevicesList;

InputStream mmInputStream;
Thread workerThread;

byte[] readBuffer;
int readBufferPosition;
int counter;
volatile boolean stopWorker;

  ArrayAdapter<String> btArrayAdapter;

  /** Called when the activity is first created. */
  @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btnScanDevice = (Button)findViewById(R.id.scandevice);

    stateBluetooth = (TextView)findViewById(R.id.bluetoothstate);
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    connect = (Button)findViewById(R.id.button2);
    listDevicesFound = (ListView)findViewById(R.id.devicesfound);
     btArrayAdapter = new ArrayAdapter<String>(this,       android.R.layout.simple_list_item_1);
    listDevicesFound.setAdapter(btArrayAdapter);


    CheckBlueToothState();

    btnScanDevice.setOnClickListener(btnScanDeviceOnClickListener);

    registerReceiver(ActionFoundReceiver, 
      new IntentFilter(BluetoothDevice.ACTION_FOUND));
}

 @Override
 protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(ActionFoundReceiver);
 }

 private void CheckBlueToothState(){
  if (mBluetoothAdapter == null){
     stateBluetooth.setText("Bluetooth NOT support");
    }else{
     if (mBluetoothAdapter.isEnabled()){
      if(mBluetoothAdapter.isDiscovering()){
       stateBluetooth.setText("Bluetooth is currently in device discovery process.");
      }else{
       stateBluetooth.setText("Bluetooth is Enabled.");
       btnScanDevice.setEnabled(true);
      }
     }else{
      stateBluetooth.setText("Bluetooth is NOT Enabled!");
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
         startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
     }
    }
}

private Button.OnClickListener btnScanDeviceOnClickListener
= new Button.OnClickListener(){

 @Override
 public void onClick(View arg0) {
 // TODO Auto-generated method stub
 btArrayAdapter.clear();
 mBluetoothAdapter.startDiscovery();
 }};

   @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   // TODO Auto-generated method stub
    if(requestCode == REQUEST_ENABLE_BT){
    CheckBlueToothState();
  }
  }

  private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver(){

  @Override
  public void onReceive(Context context, Intent intent) {
 // TODO Auto-generated method stub
 String action = intent.getAction();
 if(BluetoothDevice.ACTION_FOUND.equals(action)) {
         BluetoothDevice device =         intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
         btArrayAdapter.add(device.getName() + "\n" + device.getAddress());
         btArrayAdapter.notifyDataSetChanged();
     }
   }

  };}
4

1 に答える 1