2012-05-29 30 views
19

Estoy tratando de obtener mis dispositivos vinculados con bluetooth, pero puedo obtenerlo como una cadena larga en lugar de lista.¿Cómo obtener los dispositivos bluetooth como una lista?

Este es mi código:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); 
ArrayList<String> listview = 
new ArrayList<String>(Arrays.asList(pairedDevices.toString())); 
setListAdapter(new ArrayAdapter<String>(this, R.layout.list, listview)); 

Me estoy haciendo algo como esto: [00:23:7F:1c, f0:09:f1:b4:b0]. Y todo en una línea. ¿Cómo puedo cambiarlo para que esté en una lista y no todo en una línea?

Además, ¿cómo puedo obtener los nombres descriptivos de los dispositivos y no estos números?

Gracias !!!

+0

¿Ha implementado que al hacer clic en el elemento de la lista se conecta automáticamente al dispositivo vinculado? –

Respuesta

27

Debe cambiar el código de la siguiente manera:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); 

List<String> s = new ArrayList<String>(); 
for(BluetoothDevice bt : pairedDevices) 
    s.add(bt.getName()); 

setListAdapter(new ArrayAdapter<String>(this, R.layout.list, s)); 
+0

yea !!! ¡¡¡Gracias!!!solo necesito agregar que he cambiado la lista s = new ArrayList (); a ArrayList s = new ArrayList (); funciona bien ahora – roiberg

+0

vea la respuesta actualizada – waqaslam

+0

tienen el mismo error después de su actualización. hizo el mismo cambio que antes y funciona ahora. este fue el error que me dio antes de mi solución: El tipo Lista no es genérico; no se puede parametrizar con los argumentos roiberg

9

He probado el código de abajo,

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 
<TextView 
    android:id="@+id/bluetoothstate" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
<Button 
    android:id="@+id/listpaireddevices" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="List Paired Devices" 
    android:enabled="false" 
    /> 
<TextView 
    android:id="@+id/bluetoothstate" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 

ListPairedDevicesActivity.java

import java.util.Set; 

import android.app.ListActivity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothClass; 
import android.bluetooth.BluetoothDevice; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class ListPairedDevicesActivity extends ListActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    ArrayAdapter<String> btArrayAdapter 
    = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1); 

    BluetoothAdapter bluetoothAdapter 
    = BluetoothAdapter.getDefaultAdapter(); 
    Set<BluetoothDevice> pairedDevices 
    = bluetoothAdapter.getBondedDevices(); 

    if (pairedDevices.size() > 0) { 
     for (BluetoothDevice device : pairedDevices) { 
     String deviceBTName = device.getName(); 
     String deviceBTMajorClass 
     = getBTMajorDeviceClass(device 
      .getBluetoothClass() 
      .getMajorDeviceClass()); 
     btArrayAdapter.add(deviceBTName + "\n" 
     + deviceBTMajorClass); 
     } 
    } 
    setListAdapter(btArrayAdapter); 

} 

private String getBTMajorDeviceClass(int major){ 
    switch(major){ 
    case BluetoothClass.Device.Major.AUDIO_VIDEO: 
    return "AUDIO_VIDEO"; 
    case BluetoothClass.Device.Major.COMPUTER: 
    return "COMPUTER"; 
    case BluetoothClass.Device.Major.HEALTH: 
    return "HEALTH"; 
    case BluetoothClass.Device.Major.IMAGING: 
    return "IMAGING"; 
    case BluetoothClass.Device.Major.MISC: 
    return "MISC"; 
    case BluetoothClass.Device.Major.NETWORKING: 
    return "NETWORKING"; 
    case BluetoothClass.Device.Major.PERIPHERAL: 
    return "PERIPHERAL"; 
    case BluetoothClass.Device.Major.PHONE: 
    return "PHONE"; 
    case BluetoothClass.Device.Major.TOY: 
    return "TOY"; 
    case BluetoothClass.Device.Major.UNCATEGORIZED: 
    return "UNCATEGORIZED"; 
    case BluetoothClass.Device.Major.WEARABLE: 
    return "AUDIO_VIDEO"; 
    default: return "unknown!"; 
    } 
} 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    // TODO Auto-generated method stub 
    super.onListItemClick(l, v, position, id); 

    Intent intent = new Intent(); 
    setResult(RESULT_OK, intent); 
    finish(); 
} 

} 

AndroidBluetooth.java

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

public class AndroidBluetooth extends Activity { 

private static final int REQUEST_ENABLE_BT = 1; 
private static final int REQUEST_PAIRED_DEVICE = 2; 

    /** Called when the activity is first created. */ 
Button btnListPairedDevices; 
TextView stateBluetooth; 
BluetoothAdapter bluetoothAdapter; 

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

     btnListPairedDevices = (Button)findViewById(R.id.listpaireddevices); 

     stateBluetooth = (TextView)findViewById(R.id.bluetoothstate); 
     bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

     CheckBlueToothState(); 

     btnListPairedDevices.setOnClickListener(btnListPairedDevicesOnClickListener); 
    } 

    private void CheckBlueToothState(){ 
    if (bluetoothAdapter == null){ 
     stateBluetooth.setText("Bluetooth NOT support"); 
     }else{ 
     if (bluetoothAdapter.isEnabled()){ 
      if(bluetoothAdapter.isDiscovering()){ 
      stateBluetooth.setText("Bluetooth is currently in device discovery process."); 
      }else{ 
      stateBluetooth.setText("Bluetooth is Enabled."); 
      btnListPairedDevices.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 btnListPairedDevicesOnClickListener 
    = new Button.OnClickListener(){ 

    @Override 
    public void onClick(View arg0) { 
    // TODO Auto-generated method stub 
    Intent intent = new Intent(); 
    intent.setClass(AndroidBluetooth.this, ListPairedDevicesActivity.class); 
    startActivityForResult(intent, REQUEST_PAIRED_DEVICE); 
    }}; 

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

    } 
    } 
} 
} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.test.AndroidBluetooth" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="7" /> 
    <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".AndroidBluetooth" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    <activity android:name=".ListPairedDevicesActivity" 
     android:label="AndroidBluetooth: List of Paired Devices"/> 
    </application> 
</manifest> 
+0

¿Se conecta al dispositivo vinculado con un clic? –

24

Encuentra lista de cercanas Bluetooth dispositivos:

Buscar Captura de pantalla para lo mismo.

enter image description here

MainActivity.java:

public class MainActivity extends ActionBarActivity { 

    private ListView listView; 
    private ArrayList<String> mDeviceList = new ArrayList<String>(); 
    private BluetoothAdapter mBluetoothAdapter; 

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

     listView = (ListView) findViewById(R.id.listView); 

     mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
     mBluetoothAdapter.startDiscovery(); 

     IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
     registerReceiver(mReceiver, filter); 

    } 


    @Override 
    protected void onDestroy() { 
     unregisterReceiver(mReceiver); 
     super.onDestroy(); 
    } 

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
       BluetoothDevice device = intent 
         .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       mDeviceList.add(device.getName() + "\n" + device.getAddress()); 
       Log.i("BT", device.getName() + "\n" + device.getAddress()); 
       listView.setAdapter(new ArrayAdapter<String>(context, 
         android.R.layout.simple_list_item_1, mDeviceList)); 
      } 
     } 
    }; 

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.bluetoothdemo.MainActivity" > 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/listView"/> 

</RelativeLayout> 

Manifiesto archivo:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.bluetoothdemo" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="21" /> 

    <uses-permission android:name="android.permission.BLUETOOTH" /> 
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Hecho

+0

Hombre que es genial. – DavidBalas

+0

@DavidBalas, me alegro de ayudarte. –

+0

¿Se conecta a un dispositivo emparejado al que se hace clic? –

1

En este código sólo tiene que llamar a esto en su clic de botón.

private void list_paired_Devices() { 
     Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); 
     ArrayList<String> devices = new ArrayList<>(); 
     for (BluetoothDevice bt : pairedDevices) { 
      devices.add(bt.getName() + "\n" + bt.getAddress()); 
     } 
     ArrayAdapter arrayAdapter = new ArrayAdapter(bluetooth.this, android.R.layout.simple_list_item_1, devices); 
     emp.setAdapter(arrayAdapter); 
    } 
Cuestiones relacionadas