先看代码再说问题
- Java code
package com.keruikang.item01;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import java.util.UUID;import android.app.ListActivity;import android.app.ProgressDialog;import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.bluetooth.BluetoothSocket;import android.content.BroadcastReceiver;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnDismissListener;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.View;import android.view.WindowManager;import android.widget.ArrayAdapter;import android.widget.ListView;public class DiscoveryActivity extends ListActivity { private Handler _handler = new Handler(); /* 取得默认的蓝牙适配器 */ private BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter(); /* 用来存储搜索到的蓝牙设备 */ private List<BluetoothDevice> _devices = new ArrayList<BluetoothDevice>(); public static final UUID MyUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); public static BluetoothSocket btSocket; private ProgressDialog pg = null; public static InputStream fis; /* 是否完成搜索 */ private volatile boolean _discoveryFinished; // 启动一个进程开始搜索 public Runnable _discoveryWorkder = new Runnable() { public void run() { /* 开始搜索 */ _bluetooth.startDiscovery(); for (;;) { if (_discoveryFinished) { break; } try { Thread.sleep(100); } catch (InterruptedException e) { } } } }; // 搜索设备的广播监听器 private BroadcastReceiver _foundReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { /* 从intent中取得搜索结果数据 */ BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // 只添加相应的设备 if (device.getName().equals("creative wireless")) { _devices.add(device); } // /* 显示列表 */ showDevices(); } }; private BroadcastReceiver _discoveryReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { /* 卸载注册的接收器 */ unregisterReceiver(_foundReceiver); unregisterReceiver(this); _discoveryFinished = true; } }; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND); setContentView(R.layout.discovery); /* 注册接收器 */ IntentFilter discoveryFilter = new IntentFilter( BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(_discoveryReceiver, discoveryFilter); IntentFilter foundFilter = new IntentFilter( BluetoothDevice.ACTION_FOUND); registerReceiver(_foundReceiver, foundFilter); /* 显示一个对话框,正在搜索蓝牙设备 */ SamplesUtils.indeterminate(DiscoveryActivity.this, _handler, "设备搜索中...", _discoveryWorkder, new OnDismissListener() { public void onDismiss(DialogInterface dialog) { for (; _bluetooth.isDiscovering();) { _bluetooth.cancelDiscovery(); } _discoveryFinished = true; } }, true); } /* 显示列表 */ protected void showDevices() { List<String> list = new ArrayList<String>(); if (_devices.size() == 0) { StringBuilder b = new StringBuilder(); b.append("没有搜索到设备"); list.add(b.toString()); } else { for (int i = 0, size = _devices.size(); i < size; ++i) { StringBuilder b = new StringBuilder(); BluetoothDevice d = _devices.get(i); b.append(d.getAddress()); b.append('\n'); b.append(d.getName()); String s = b.toString(); list.add(s); } } final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list); setListAdapter(adapter); } // 响应列表点击事件 protected void onListItemClick(ListView l, View v, int position, long id) { String address = _devices.get(position).getAddress(); BluetoothDevice btDev = _bluetooth.getRemoteDevice(address); pg = new ProgressDialog(DiscoveryActivity.this); pg.setTitle("连接中"); pg.setMessage("请等待..."); pg.show(); try { // Boolean returnValue = false; switch (btDev.getBondState()) { case BluetoothDevice.BOND_NONE: // 利用反射方法调用BluetoothDevice.createBond(BluetoothDevice // remoteDevice); Method createBondMethod = BluetoothDevice.class .getMethod("createBond"); Log.d("BlueToothTestActivity", "开始配对"); createBondMethod.invoke(btDev); break; case BluetoothDevice.BOND_BONDED: btSocket = btDev.createRfcommSocketToServiceRecord(MyUUID); System.out.println("开始连接 " + btDev.getAddress()); btSocket.connect(); System.out.println("连接完成,进度条消失"); pg.dismiss(); fis = btSocket.getInputStream(); MainActivity.setfis(fis); finish(); break; } } catch (Exception e) { Log.d("BlueToothTestActivity", "连接失败..."); e.printStackTrace(); } } public static InputStream ret_fis() { return fis; } public static void Myquit() throws IOException{ fis.close(); btSocket.close(); }}