2012-05-29 99 views
19

我試圖讓我的保稅藍牙設備,但我可以得到它作爲一個長字符串,而不是列表。如何將藍牙設備列表?

這是我的代碼:

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

我得到這樣的:[00:23:7F:1c, f0:09:f1:b4:b0]。它的一切都在一條線上。 如何將其更改爲列表中,而不是全部在一行中?

另外,如何獲得設備的友好名稱而不是這些數字?

謝謝!

+0

難道就實現了在列表的項目點擊時會自動連接到配對的設備? –

回答

27

你應該如下更改代碼:

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

是啊!謝謝!!!只需要補充說我改了名單 s = new ArrayList (); ArrayList s = new ArrayList ();它現在效果很好。 – roiberg

+0

查看更新後的答案 – waqaslam

+0

在更新後有相同的錯誤。 做了我以前做過的同樣的改變,現在它可以工作。 這是我給我修復的錯誤: 類型列表不是通用的;它不能用參數參數化 roiberg

9

我嘗試下面的代碼,

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

它是否通過點擊連接到配對設備? –

24

找到附近的藍牙設備名單

查找相同的屏幕截圖。

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> 

清單文件:

<?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> 

完成

+0

非常棒的男人。 – DavidBalas

+0

@DavidBalas,很高興爲您效勞。 –

+0

它是否連接到點擊的配對設備? –

1

在這段代碼中,你只需要在你點擊按鈕來調用它。

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