展会信息港展会大全

android开发之蓝牙主动配对连接手机
来源:互联网   发布日期:2015-09-28 15:58:59   浏览:2043次  

导读:上一篇介绍了手机配对连接的三种方式,这篇以完整的一个代码实例介绍如何搜索周围的蓝牙设备,以及主动配对,连接。package jason.com;import java.io.IOExce...

上一篇介绍了手机配对连接的三种方式,这篇以完整的一个代码实例介绍如何搜索周围的蓝牙设备,以及主动配对,连接。

package jason.com;

import java.io.IOException;

import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.List;

import java.util.UUID;

import android.app.Activity;

import android.bluetooth.BluetoothAdapter;

import android.bluetooth.BluetoothDevice;

import android.bluetooth.BluetoothSocket;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.Button;

import android.widget.ListView;

import android.widget.Toast;

import android.widget.ToggleButton;

public class BlueToothTestActivity extends Activity {

//该UUID表示串口服务

static final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";

Button btnSearch, btnDis, btnExit;

ToggleButton tbtnSwitch;

ListView lvBTDevices;

ArrayAdapter adtDevices;

List lstDevices = new ArrayList();

BluetoothAdapter btAdapt;

public static BluetoothSocket btSocket;

@Override

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(this,

android.R.layout.simple_list_item_1, lstDevices);

lvBTDevices.setAdapter(adtDevices);

lvBTDevices.setOnItemClickListener(new ItemClickEvent());

btAdapt = BluetoothAdapter.getDefaultAdapter();// 初始化本机蓝牙功能

// ========================================================

// modified by jason0539 搜索jason0539进入我的博客

/*

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

} else {

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

try {

Boolean returnValue = false;

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

try {

btSocket = btDev.createRfcommSocketToServiceRecord(uuid);

Log.d("BlueToothTestActivity", "开始连接...");

btSocket.connect();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

class ClickEvent implements View.OnClickListener {

@Override

public void onClick(View v) {

if (v == btnSearch)// 搜索蓝牙设备,在BroadcastReceiver显示结果

{

if (btAdapt.getState() == BluetoothAdapter.STATE_OFF) {// 如果蓝牙还没开启

Toast.makeText(BlueToothTestActivity.this, "请先打开蓝牙", 1000)

.show();

return;

}

if (btAdapt.isDiscovering())

btAdapt.cancelDiscovery();

lstDevices.clear();

Object[] lstDevice = btAdapt.getBondedDevices().toArray();

for (int i = 0; i

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港