0

Bluetoothを使用してJavaAndroidアプリケーションを作成しようとしていますが、リストビューでペアリングされているかどうかに関係なくすべてのデバイスを検索した後、結果を表示したり、デバイスに接続したりするのに問題があります。コードで接続しようとしています。それのMACアドレスを使用しているデバイスですが、それは機能せず、テキストビューで結果を表示します、何か考えはありますか???? ありがとうございました。

public class Conexion_bluetooth extends Activity {
TextView out; 

// Debugging
private static final UUID MY_UUID = UUID.fromString("fa87c0d0-afac-11de-8a39-0800200c9a66");
private BluetoothAdapter mBluetoothAdapter = null;
private BluetoothSocket mmSocket=null;
private static final String TAG = "BluetoothChat";
private static final boolean D = true;

private static final int REQUEST_ENABLE_BT = 3;

private BluetoothAdapter mBluetoothAdapter = null;

ListView lstDispositivos;
ListView lstDispositivos2;

@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     if(D) Log.e(TAG, "+++ ON CREATE +++");

     // Set up the window layout
     setContentView(R.layout.activity_conexion_bluetooth);

     // Get local Bluetooth adapter
     mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

     // If the adapter is null, then Bluetooth is not supported
     if (mBluetoothAdapter == null) {
         Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show();
         finish();
         return;
     }
 }

@Override
//Comprueba que el bluetooth esta conectado
public void onStart() {
    super.onStart();
    if(D) Log.e(TAG, "++ ON START ++");

    // Si el bluetooth no está activado muestra un mensaje solicitando permiso para activarle
    if (!mBluetoothAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
        Toast.makeText(this, "conectando...", Toast.LENGTH_LONG).show();

    }else{
        Toast.makeText(this, "conectado", Toast.LENGTH_LONG).show();
    }
}

public void buscar(View view){
    //TextView dispositivos = (TextView) findViewById(R.id.dispositivos);


    if (mBluetoothAdapter.isDiscovering()) {
        Toast.makeText(this, "\nCancel discovery...", Toast.LENGTH_LONG).show();
        mBluetoothAdapter.cancelDiscovery(); 
    }else{
        Toast.makeText(this, "\nStarting discovery...", Toast.LENGTH_LONG).show();
        //mBluetoothAdapter.
        mBluetoothAdapter.startDiscovery(); 
        Toast.makeText(this, "\nDone with discovery...", Toast.LENGTH_LONG).show();
    }

    final TextView dispositivos = (TextView) findViewById(R.id.dispositivos);
    String dispositivo[] = new String[]{};
    final Vector<String> dispositivosBT = new Vector<String>();
    //final int dispEncontrados=0;

    // Create a BroadcastReceiver for ACTION_FOUND
    final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            //String dispositivosBT[] = new String[]{};
            String action = intent.getAction();
            // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                //setContentView(R.layout.dispositivos_bluetooth);//determinamos que al iniciar la aplicacion aparezca esta pantalla
                    // Get the BluetoothDevice object from the Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    //  Add the name and address to an array adapter to show in a ListView
                    dispositivos.append("\n" + device.getName() + "\n" + device.getAddress());
            }
        }
    };
    // Register the BroadcastReceiver
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

    //dispositivosBT = new String[dispositivos.length()];
    //final ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, dispositivosBT);
    final TextView dispositivosSincronizados = (TextView) findViewById(R.id.dispositivosSincronizados);
    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
    // If there are paired devices
    if (pairedDevices.size() > 0) {
        // Loop through paired devices
        for (BluetoothDevice device : pairedDevices) {
            // Add the name and address to an array adapter to show in a ListView
            dispositivosSincronizados.append("\n" + device.getName() + "\n" + device.getAddress());
        }
    }
}
public void paraBusqueda(View view){
    if (mBluetoothAdapter.isDiscovering()) {
        Toast.makeText(this, "\nCancel discovery...", Toast.LENGTH_LONG).show();
        mBluetoothAdapter.cancelDiscovery();
    }else{
        Toast.makeText(this, "\nis not discovering...", Toast.LENGTH_LONG).show();
    }

}

public void pararBluetooth(){
    if (mBluetoothAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);        
    }
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_conexion_bluetooth, menu);
    return true;
}

public void conectar(View view){
    String address = "00:15:83:07:d1:14";
 device = mBluetoothAdapter.getRemoteDevice(address);
 Toast.makeText(getApplicationContext(), "cONNECTING", Toast.LENGTH_SHORT).show();
 try {

 mmSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
 mmSocket.connect();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
}

}

4

2 に答える 2

0

AsyncTaskを使用して、 Bluetooth接続を確立できます。

 public class BluetoothConnectionActivity extends Activity {

    private Button connectButton;

    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            connectButton = (Button) findViewById(R.id.connectButton);
            connectButton.setOnclickListener(View.onClickListener() {
                        @Override
                    public void onClick(View v) {
                           String address = "00:15:83:07:d1:14";
                   new ConnectAsyncTask(address).execute();
                    }
                    });


        }

    private class ConnectAsyncTask extends AsyncTask<String, Void, Boolean> {
        @Override
        protected void onPostExecute(Boolean isConnected) {
            Toast.makeText(getApplicationContext(), "Connecting...",
                    Toast.LENGTH_SHORT).show();
        }

        @Override
        protected Boolean doInBackground(String... param) {
            BluetoothDevice device = BluetoothAdapter
                    .getDefaultBluetoothAdapter().getRemoteDevice(param[0]);
            try {
                BluetoothSocket mmSocket = device
                        .createRfcommSocketToServiceRecord(MY_UUID);
                mmSocket.connect();
            } catch (Exception e) {
                e.printStackTrace();
                Log.d("BluetoothConnectivity", "ERROR:" + e.getMessage());
                return false;
            }
            return true;
        }

        @Override
        protected void onPostExecute(Boolean isConnected) {
            if (isConnected) {
                Toast.makeText(getApplicationContext(), "Connected",
                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getApplicationContext(), "Failed to connected",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }
}

よろしくスリーニ

于 2012-07-10T05:11:44.483 に答える
0

最近、いくつかのアプリケーションで bluetooth を使用しました。私はアンドロイドの専門家ではありません。次のことを試すことができます。
1. Bluetooth デバイスの UUID を確認します
2. Bluetooth への接続は別のスレッドで行う必要があります
3. アプリをデバッグ モードで実行し、例外またはエラーを確認します。Android Bluetooth
のドキュメントを参照してください 。それでも同じ問題が発生する場合は、Bluetooth サンプル アプリケーションを参照してください。それ以外の場合は、接続を確立するために作成したコードを送信します。 よろしく スリーニ



于 2012-07-09T11:59:12.727 に答える