2013-02-19 73 views
2

我试图从列表视图连接到配对的蓝牙设备,但我似乎无法做到正确。我的代码看起来很好,但是当我在手机上运行它时,它什么都不做。任何帮助将不胜感激。谢谢。从列表视图连接到蓝牙设备

import java.io.IOError; 
import java.io.IOException; 
import java.io.InvalidObjectException; 
import java.util.Set; 
import java.util.UUID; 
import android.app.ListActivity; 
import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothSocket; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Devices extends ListActivity { 

    private ArrayAdapter<String> btArrayAdapter; 
    private BluetoothAdapter btAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     btArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
     btAdapter = BluetoothAdapter.getDefaultAdapter(); 
     getPairedDevices(); 
    } 


    private void getPairedDevices() { 

Set<BluetoothDevice> pairedDevices = btAdapter.getBondedDevices(); 
if(pairedDevices.size()>0){ 
    for (BluetoothDevice device :pairedDevices){ 
     String name = device.getName(); 
     btArrayAdapter.add(name); 
    } 
} 

setListAdapter(btArrayAdapter); 
    } 

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 

Set<BluetoothDevice> device = btAdapter.getBondedDevices(); 
//System.out.println(device.getClass()); 

Thread ConnectThread = new Thread(); 
ConnectThread.start(); 


    } 

    public class ConnectThread extends Thread{ 

private final BluetoothSocket mmSocket; 
private final BluetoothDevice mmDevice; 
private final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 

public ConnectThread(BluetoothDevice device){ 
    BluetoothSocket tmp = null; 
    mmDevice = device; 

    try{ 
     tmp = device.createInsecureRfcommSocketToServiceRecord(MY_UUID); 
    } catch (IOException e){} 
    mmSocket = tmp; 
} 

public void run(){ 
    btAdapter.cancelDiscovery(); 

    try{ 
     mmSocket.connect(); 
    }catch (IOException connectException){ 

     try{ 
      mmSocket.close(); 
     }catch (IOException closeException){} 
     return; 

    } 

    //Work to manage connection 
} 

public void cancel(){ 
    try{ 
     mmSocket.close(); 
    }catch (IOException e){} 
} 
} 





} 
+0

很抱歉的代码如何凌乱是。 – 2013-02-19 16:33:24

+0

我不明白你想要做什么 – njzk2 2013-02-20 17:28:51

+0

谢谢你问我这个问题的解决方案。 – Aravin 2013-08-23 17:17:19

回答

2

在您的onCreate()方法中,您需要为您的ListView设置适配器。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    btArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 
    btAdapter = BluetoothAdapter.getDefaultAdapter(); 
    setListAdapter(btArrayAdapter); 
    getPairedDevices(); 
} 
+0

谢谢。我刚刚尝试过,但没有任何区别。在列表视图中选择的设备不会连接。 – 2013-02-19 16:42:53

+0

帮助任何人?请?我真的坚持这一点。 :( – 2013-02-19 18:10:52

+0

抱歉,我在代码中犯了一个错误,在添加信息之前应该设置ListAdapter。另外,在getPairedDevices()方法中,在for循环完成后,您应该刷新列表视图 – jonbonazza 2013-02-20 17:28:12