如何实现android 实现蓝牙搜索蓝牙自动配对连接

博客分类:
package cn.madfinger.
import java.io.IOE
import java.lang.reflect.M
import java.util.ArrayL
import java.util.L
import java.util.UUID;
import android.app.A
import android.bluetooth.BluetoothA
import android.bluetooth.BluetoothD
import android.bluetooth.BluetoothS
import android.content.BroadcastR
import android.content.C
import android.content.I
import android.content.IntentF
import android.os.B
import android.util.L
import android.view.V
import android.widget.AdapterV
import android.widget.ArrayA
import android.widget.B
import android.widget.ListV
import android.widget.T
import android.widget.ToggleB
public class BlueToothTestActivity extends Activity {
//该UUID表示串口服务
//请参考文章
static final String SPP_UUID = "0-805F9B34FB";
Button btnSearch, btnDis, btnE
ToggleButton tbtnS
ListView lvBTD
ArrayAdapter&String& adtD
List&String& lstDevices = new ArrayList&String&();
BluetoothAdapter btA
public static BluetoothSocket btS
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Button 设置
btnSearch = (Button) this.findViewById(R.id.btnSearch);
btnSearch.setOnClickListener(new ClickEvent());
btnExit = (Button) this.findViewById(R.id.btnExit);
btnExit.setOnClickListener(new ClickEvent());
btnDis = (Button) this.findViewById(R.id.btnDis);
btnDis.setOnClickListener(new ClickEvent());
// ToogleButton设置
tbtnSwitch = (ToggleButton) this.findViewById(R.id.tbtnSwitch);
tbtnSwitch.setOnClickListener(new ClickEvent());
// ListView及其数据源 适配器
lvBTDevices = (ListView) this.findViewById(R.id.lvDevices);
adtDevices = new ArrayAdapter&String&(this,
android.R.layout.simple_list_item_1, lstDevices);
lvBTDevices.setAdapter(adtDevices);
lvBTDevices.setOnItemClickListener(new ItemClickEvent());
btAdapt = BluetoothAdapter.getDefaultAdapter();// 初始化本机蓝牙功能
// ========================================================
// modified by wiley
* if (btAdapt.getState() == BluetoothAdapter.STATE_OFF)// 读取蓝牙状态并显示
* tbtnSwitch.setChecked(false); else if (btAdapt.getState() ==
* BluetoothAdapter.STATE_ON) tbtnSwitch.setChecked(true);
if (btAdapt.isEnabled()) {
tbtnSwitch.setChecked(false);
tbtnSwitch.setChecked(true);
// ============================================================
// 注册Receiver来获取蓝牙设备相关的结果
IntentFilter intent = new IntentFilter();
intent.addAction(BluetoothDevice.ACTION_FOUND);// 用BroadcastReceiver来取得搜索结果
intent.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
intent.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
intent.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(searchDevices, intent);
private BroadcastReceiver searchDevices = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Bundle b = intent.getExtras();
Object[] lstName = b.keySet().toArray();
// 显示所有收到的消息及其细节
for (int i = 0; i & lstName. i++) {
String keyName = lstName[i].toString();
Log.e(keyName, String.valueOf(b.get(keyName)));
BluetoothDevice device =
// 搜索设备时,取得设备的MAC地址
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device.getBondState() == BluetoothDevice.BOND_NONE) {
String str = "未配对|" + device.getName() + "|"
+ device.getAddress();
if (lstDevices.indexOf(str) == -1)// 防止重复添加
lstDevices.add(str); // 获取设备名称和mac地址
adtDevices.notifyDataSetChanged();
}else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)){
device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
switch (device.getBondState()) {
case BluetoothDevice.BOND_BONDING:
Log.d("BlueToothTestActivity", "正在配对......");
case BluetoothDevice.BOND_BONDED:
Log.d("BlueToothTestActivity", "完成配对");
connect(device);//连接设备
case BluetoothDevice.BOND_NONE:
Log.d("BlueToothTestActivity", "取消配对");
protected void onDestroy() {
this.unregisterReceiver(searchDevices);
super.onDestroy();
android.os.Process.killProcess(android.os.Process.myPid());
class ItemClickEvent implements AdapterView.OnItemClickListener {
public void onItemClick(AdapterView&?& arg0, View arg1, int arg2,
long arg3) {
if(btAdapt.isDiscovering())btAdapt.cancelDiscovery();
String str = lstDevices.get(arg2);
String[] values = str.split("\\|");
String address = values[2];
Log.e("address", values[2]);
BluetoothDevice btDev = btAdapt.getRemoteDevice(address);
Boolean returnValue =
if (btDev.getBondState() == BluetoothDevice.BOND_NONE) {
//利用反射方法调用BluetoothDevice.createBond(BluetoothDevice remoteDevice);
Method createBondMethod = BluetoothDevice.class
.getMethod("createBond");
Log.d("BlueToothTestActivity", "开始配对");
returnValue = (Boolean) createBondMethod.invoke(btDev);
}else if(btDev.getBondState() == BluetoothDevice.BOND_BONDED){
connect(btDev);
} catch (Exception e) {
e.printStackTrace();
private void connect(BluetoothDevice btDev) {
UUID uuid = UUID.fromString(SPP_UUID);
btSocket = btDev.createRfcommSocketToServiceRecord(uuid);
Log.d("BlueToothTestActivity", "开始连接...");
btSocket.connect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
class ClickEvent implements View.OnClickListener {
public void onClick(View v) {
if (v == btnSearch)// 搜索蓝牙设备,在BroadcastReceiver显示结果
if (btAdapt.getState() == BluetoothAdapter.STATE_OFF) {// 如果蓝牙还没开启
Toast.makeText(BlueToothTestActivity.this, "请先打开蓝牙", 1000)
if (btAdapt.isDiscovering())
btAdapt.cancelDiscovery();
lstDevices.clear();
Object[] lstDevice = btAdapt.getBondedDevices().toArray();
for (int i = 0; i & lstDevice. i++) {
BluetoothDevice device = (BluetoothDevice) lstDevice[i];
String str = "已配对|" + device.getName() + "|"
+ device.getAddress();
lstDevices.add(str); // 获取设备名称和mac地址
adtDevices.notifyDataSetChanged();
setTitle("本机蓝牙地址:" + btAdapt.getAddress());
btAdapt.startDiscovery();
} else if (v == tbtnSwitch) {// 本机蓝牙启动/关闭
if (tbtnSwitch.isChecked() == false)
btAdapt.enable();
else if (tbtnSwitch.isChecked() == true)
btAdapt.disable();
} else if (v == btnDis)// 本机可以被搜索
Intent discoverableIntent = new Intent(
BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(
BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
} else if (v == btnExit) {
if (btSocket != null)
btSocket.close();
} catch (IOException e) {
e.printStackTrace();
BlueToothTestActivity.this.finish();
浏览 21728
浏览: 229303 次
来自: 上海
多谢楼主配对那一段,解决了我的大问题啊
这个反射的createBond用法很有意思这个代码能像非and ...
例子还是短小看着一目了然。不错
在WEB中,是使用WebApplicationContext的 ...
请问一下楼主,这个UUID是不是和设备有关啊,我使用你的 co ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'android 蓝牙搜索、配对连接通信总结
蓝牙协议可以实现一个蓝牙设备和6到8个蓝牙设备进行通信。
1、蓝牙搜索的实现
利用蓝牙的发现和完成动作动态注册广播接受者获得蓝牙设备。
第一步,获得蓝牙适配器
BluetoothAdapter mBtAdapter= BluetoothAdapter.getDefaultAdapter(); // 判断蓝牙是否打开
if (!mAdapter.isEnabled()) {
mAdapter.enable();
第二步动态注册蓝牙搜索广播接收者
// Register for broadcasts when a device is discovered
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, filter);
// Register for broadcasts when discovery has finished
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(mReceiver, filter);
并且可以利用意图过滤器设置广播的优先级
filter.setPriority(Integer.MAX_VALUE);
对应的广播接收者:
// The BroadcastReceiver that listens for discovered devices and
// changes the title when discovery is finished
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// When discovery finds a device
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// Get the BluetoothDevice object from the Intent
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// If it's already paired, skip it, because it's been listed already
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
// When discovery is finished, change the Activity title
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
setProgressBarIndeterminateVisibility(false);
setTitle(R.string.select_device);
if (mNewDevicesArrayAdapter.getCount() == 0) {
String noDevices = getResources().getText(R.string.none_found).toString();
mNewDevicesArrayAdapter.add(noDevices);
或者利用发现和完成动作定义两个广播接受者,在完成的动作中注销广播接收者。
关键代码如下:
* 接收器 当搜索蓝牙设备完成时调用
private BroadcastReceiver _foundReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
BluetoothDevice device = intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// 将结果添加到列表中
_devices.add(device);
DeviceInfo info = new DeviceInfo();
info.setmDeviceName(device.getName());
info.setmDeviceMacAddr(device.getAddress());
infos.add(info);
// 显示列表
showDevices();
private BroadcastReceiver _discoveryReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// 卸载注册的接收器
unregisterReceiver(_foundReceiver);
unregisterReceiver(this);
_discoveryFinished =
这样便完成蓝牙的搜索了。
2、蓝牙配对
蓝牙要想通信目前是必须要先配对才能连接的。
蓝牙配对的api是hide的。但是api19可以直接调用蓝牙设备的配对方法。
所以配对都是利用反射的方法。这里有一个强大的工具类可以直接拿来使用,如下:
public class ClsUtils {
public ClsUtils() {
// TODO Auto-generated constructor stub
* 与设备配对 参考:platform/packages/apps/Settings.git
* /Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
static public boolean createBond(Class btClass, BluetoothDevice btDevice)
throws Exception
Method createBondMethod = btClass.getMethod("createBond");
Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice);
return returnValue.booleanValue();
* 与设备解除配对 参考源码:platform/packages/apps/Settings.git
* /Settings/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
static public boolean removeBond(Class btClass, BluetoothDevice btDevice)
throws Exception
Method removeBondMethod = btClass.getMethod("removeBond");
Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice);
return returnValue.booleanValue();
static public boolean setPin(Class btClass, BluetoothDevice btDevice,
String str) throws Exception
Method removeBondMethod = btClass.getDeclaredMethod("setPin",
new Class[]
{byte[].class});
Boolean returnValue = (Boolean) removeBondMethod.invoke(btDevice,
new Object[]
{str.getBytes()});
Log.e("returnValue设置密码", "" + returnValue.booleanValue());
return returnValue.booleanValue();
catch (SecurityException e)
// throw new RuntimeException(e.getMessage());
e.printStackTrace();
catch (IllegalArgumentException e)
// throw new RuntimeException(e.getMessage());
e.printStackTrace();
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
// 取消用户输入
static public boolean cancelPairingUserInput(Class btClass,
BluetoothDevice device)
throws Exception
Method createBondMethod = btClass.getMethod("cancelPairingUserInput");
cancelBondProcess(btClass,device) ;
Boolean returnValue = (Boolean) createBondMethod.invoke(device);
Log.i("取消对话框","cancelPairingUserInput"+returnValue.booleanValue());
return returnValue.booleanValue();
// 取消配对
static public boolean cancelBondProcess(Class btClass,
BluetoothDevice device)
throws Exception
Method createBondMethod = btClass.getMethod("cancelBondProcess");
Boolean returnValue = (Boolean) createBondMethod.invoke(device);
return returnValue.booleanValue();
* @param clsShow
static public void printAllInform(Class clsShow)
// 取得所有方法
Method[] hideMethod = clsShow.getMethods();
int i = 0;
for (; i < hideMethod. i++)
Log.e("method name", hideMethod[i].getName() + ";and the i is:"
// 取得所有常量
Field[] allFields = clsShow.getFields();
for (i = 0; i < allFields. i++)
Log.e("Field name", allFields[i].getName());
catch (SecurityException e)
// throw new RuntimeException(e.getMessage());
e.printStackTrace();
catch (IllegalArgumentException e)
// throw new RuntimeException(e.getMessage());
e.printStackTrace();
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
static public boolean pair(String strAddr, String strPsw)
boolean result =
BluetoothAdapter bluetoothAdapter = BluetoothAdapter
.getDefaultAdapter();
bluetoothAdapter.cancelDiscovery();
if (!bluetoothAdapter.isEnabled())
bluetoothAdapter.enable();
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(strAddr);
if (device.getBondState() != BluetoothDevice.BOND_BONDED)
Log.d("mylog", "NOT BOND_BONDED");
boolean flag1=ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对
boolean flag2=ClsUtils.createBond(device.getClass(), device);
remoteDevice = // 配对完毕就把这个设备对象传给全局的remoteDevice
catch (Exception e)
// TODO Auto-generated catch block
Log.d("mylog", "setPiN failed!");
e.printStackTrace();
Log.d("mylog", "HAS BOND_BONDED");
ClsUtils.removeBond(device.getClass(), device);
//ClsUtils.createBond(device.getClass(), device);
boolean flag1= ClsUtils.setPin(device.getClass(), device, strPsw); // 手机和蓝牙采集器配对
boolean flag2=ClsUtils.createBond(device.getClass(), device);
remoteDevice = // 如果绑定成功,就直接把这个设备对象传给全局的remoteDevice
catch (Exception e)
// TODO Auto-generated catch block
Log.d("mylog", "setPiN failed!");
e.printStackTrace();
蓝牙配对的关键代码:
flag3= ClsUtils.createBond(device.getClass(), device);
其中device是蓝牙设备。在配对的时候会有一个配对广播,可以自定义一个广播接受者获取配对广播,然后在这个广播接收者里设置pin&#20540;,取消确定对话框,实现自动配对。关键代码如下:
mReceiver=new ParingReceiver(device);
IntentFilter filter=new IntentFilter();
filter.addAction( BluetoothDevice.ACTION_PAIRING_REQUEST);
filter.setPriority(Integer.MAX_VALUE);
registerReceiver(mReceiver, filter);
private class ParingReceived extends BroadcastReceiver{
public void onReceive(Context context, Intent intent) {
BluetoothDevice btDevice=mAdapter.getRemoteDevice("EC:89:F5:98:46:f9");
setPin(btDevice.getClass(),btDevice,"000000");
cancelPairingUserInput(btDevice.getClass(), btDevice);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
在我的4.2上是没有效果的。找了一个上午的资料;网上给出了两种解决方法:(1)修改setting 系统源码,(2)模拟点击事件。
蓝牙配对完成后就可以连接通信了。
3、蓝牙通信
蓝牙同时的本质是蓝牙套接字,一个主动发起连接的的设备做客户端,一个监听连接的设备做服务端,类&#20284;sokcet网络,利用多线程,读取数据流就可完成蓝牙通信。
如下是蓝牙串口通信的关键代码:
* 建立连接并通信
* @param btDev
private boolean connect(BluetoothDevice btDev) {
boolean flag =
/*if(btDev.fetchUuidsWithSdp()){
btDev.getUuids();
//建立连接
mSocket = btDev
.createRfcommSocketToServiceRecord(UUID.fromString("0-805F9B34FB"));
mSocket.connect();
mOutputStream = mSocket.getOutputStream();
mInputStream = mSocket.getInputStream();
mOutputStream.write("StartOnNet\n".getBytes());
mOutputStream.flush();
} catch (Exception e) {
如下蓝牙服务端关键代码:
private class ServerThread implements Runnable {
private InputStream mInputS
private OutputStream mOutputS
public ServerThread() {
public void run() {
while (true) {
mBluetoothServerSocket = mAdapter
.listenUsingRfcommWithServiceRecord(
UUID.fromString("0-805F9B34FB"));
Log.i("服务端线程运行", "蓝牙服务端线程开始");
Log.i("服务端线程运行", "蓝牙服务端线程阻塞中");
mBluetoothSocket = mBluetoothServerSocket.accept();
if (mBluetoothSocket != null) {
Log.i("服务端线程运行", "蓝牙服务端线程<<<<<<<<<<<<<");
mInputStream = mBluetoothSocket.getInputStream();
mOutputStream = mBluetoothSocket.getOutputStream();
byte[] data = getSocketResult(mInputStream);
String tempString = new String(data);
Log.i("蓝牙服务端监听str", tempString);
// 向客户端发送数据
if (tempString.equals("StartOnNet\n")) {
mOutputStream.write("haha".getBytes());
mOutputStream.flush();
if(!isServiceRunning("com.yqq.endClient3.service.GpsInfoCollectionService",BluethoothServer.this)){
// 开启GPS收集服务
gpsService= new Intent(BluethoothServer.this,
GpsInfoCollectionService.class);
Log.i("蓝牙服务端监听<<<<<<<<<<<<<<<<<<<<<<", "<<<<<<<<<<<<<<<<<");
startService(gpsService);
} catch (Exception e) {
// TODO: handle exception
} finally {
if (mInputStream != null) {
mInputStream.close();
mInputStream =
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (mInputStream != null) {
mOutputStream.close();
mOutputStream =
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (mBluetoothSocket != null) {
mBluetoothSocket.close();
mBluetoothSocket =
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (mBluetoothServerSocket != null) {
mBluetoothServerSocket.close();
mBluetoothServerSocket =
Looper.prepare();
Message message = Message.obtain();
message.what = 0x123456;
mHandler.sendMessage(message);
Looper.loop();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();bluetoothautopair
说明:&&android 移动开发手机蓝牙自动配对例子,该例子可用于指导开发蓝牙配对问题。(Automatic matching cell phone bluetooth android mobile development example, the example can be used to guide the development of bluetooth pairing problem.)
文件列表:
BluetoothChat\.classpath
BluetoothChat\.project
BluetoothChat\AndroidManifest.xml
BluetoothChat\bin\AndroidManifest.xml
BluetoothChat\bin\BluetoothChat.apk
BluetoothChat\bin\classes\com\ljj\bluetoothchat\BuildConfig.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\ClientActivity$1.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\ClientActivity$2.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\ClientActivity.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\MainActivity$ButtonClickListener.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\MainActivity.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\R$attr.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\R$dimen.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\R$drawable.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\R$id.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\R$layout.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\R$menu.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\R$string.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\R$style.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\R.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\ServerActivity$1.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\ServerActivity$2.class
BluetoothChat\bin\classes\com\ljj\bluetoothchat\ServerActivity.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothClientConnThread.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothClientService$1.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothClientService$2.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothClientService$3.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothClientService.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothCommunThread.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothServerConnThread.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothServerService$1.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothServerService$2.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothServerService.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\BluetoothTools.class
BluetoothChat\bin\classes\com\ljj\bluetoothUtil\TransmitBean.class
BluetoothChat\bin\classes.dex
BluetoothChat\bin\res\drawable-hdpi\ic_action_search.png
BluetoothChat\bin\res\drawable-hdpi\ic_launcher.png
BluetoothChat\bin\res\drawable-ldpi\ic_launcher.png
BluetoothChat\bin\res\drawable-mdpi\ic_action_search.png
BluetoothChat\bin\res\drawable-mdpi\ic_launcher.png
BluetoothChat\bin\res\drawable-xhdpi\ic_action_search.png
BluetoothChat\bin\res\drawable-xhdpi\ic_launcher.png
BluetoothChat\bin\resources.ap_
BluetoothChat\gen\com\ljj\bluetoothchat\BuildConfig.java
BluetoothChat\gen\com\ljj\bluetoothchat\R.java
BluetoothChat\ic_launcher-web.png
BluetoothChat\libs\android-support-v4.jar
BluetoothChat\proguard-project.txt
BluetoothChat\project.properties
BluetoothChat\res\drawable-hdpi\ic_action_search.png
BluetoothChat\res\drawable-hdpi\ic_launcher.png
BluetoothChat\res\drawable-ldpi\ic_launcher.png
BluetoothChat\res\drawable-mdpi\ic_action_search.png
BluetoothChat\res\drawable-mdpi\ic_launcher.png
BluetoothChat\res\drawable-xhdpi\ic_action_search.png
BluetoothChat\res\drawable-xhdpi\ic_launcher.png
BluetoothChat\res\layout\activity_main.xml
BluetoothChat\res\layout\client.xml
BluetoothChat\res\layout\server.xml
BluetoothChat\res\menu\activity_main.xml
BluetoothChat\res\values\dimens.xml
BluetoothChat\res\values\strings.xml
BluetoothChat\res\values\styles.xml
BluetoothChat\res\values-large\dimens.xml
BluetoothChat\res\values-v11\styles.xml
BluetoothChat\res\values-v14\styles.xml
BluetoothChat\src\com\ljj\bluetoothchat\ClientActivity.java
BluetoothChat\src\com\ljj\bluetoothchat\MainActivity.java
BluetoothChat\src\com\ljj\bluetoothchat\ServerActivity.java
BluetoothChat\src\com\ljj\bluetoothUtil\BluetoothClientConnThread.java
BluetoothChat\src\com\ljj\bluetoothUtil\BluetoothClientService.java
BluetoothChat\src\com\ljj\bluetoothUtil\BluetoothCommunThread.java
BluetoothChat\src\com\ljj\bluetoothUtil\BluetoothServerConnThread.java
BluetoothChat\src\com\ljj\bluetoothUtil\BluetoothServerService.java
BluetoothChat\src\com\ljj\bluetoothUtil\BluetoothTools.java
BluetoothChat\src\com\ljj\bluetoothUtil\TransmitBean.java
蓝牙聊天程序说明文件.txt
BluetoothChat\bin\classes\com\ljj\bluetoothchat
BluetoothChat\bin\classes\com\ljj\bluetoothUtil
BluetoothChat\bin\classes\com\ljj
BluetoothChat\gen\com\ljj\bluetoothchat
BluetoothChat\src\com\ljj\bluetoothchat
BluetoothChat\src\com\ljj\bluetoothUtil
BluetoothChat\bin\classes\com
BluetoothChat\bin\res\drawable-hdpi
BluetoothChat\bin\res\drawable-ldpi
BluetoothChat\bin\res\drawable-mdpi
BluetoothChat\bin\res\drawable-xhdpi
BluetoothChat\gen\com\ljj
BluetoothChat\src\com\ljj
BluetoothChat\bin\classes
BluetoothChat\bin\res
BluetoothChat\gen\com
BluetoothChat\res\drawable-hdpi
BluetoothChat\res\drawable-ldpi
BluetoothChat\res\drawable-mdpi
BluetoothChat\res\drawable-xhdpi
BluetoothChat\res\layout
BluetoothChat\res\menu
近期下载者:
相关文件:}

我要回帖

更多关于 android 蓝牙自动连接 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信