找传奇、传世资源到传世资源站!

android 蓝牙传输例子BluetoothGet

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

android 蓝牙传输例子BluetoothGet Android平台开发-第1张android 蓝牙传输例子BluetoothGet Android平台开发-第2张

package com.lgl.bluetoothget;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import java.util.Set;import java.util.UUID;import android.app.Activity;import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.bluetooth.BluetoothServerSocket;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.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity implements OnItemClickListener {// 本地蓝牙适配器private BluetoothAdapter mBluetoothAdapter;// 列表private ListView lvDevices;// 存储搜索到的蓝牙private List<String> bluetoothDevices = new ArrayList<String>();// listview的adapterprivate ArrayAdapter<String> arrayAdapter;// UUID.randomUUID()随机获取UUIDprivate final UUID MY_UUID = UUID .fromString("db764ac8-4b08-7f25-aafe-59d03c27bae3");// 连接对象的名称private final String NAME = "LGL";// 这里本身即是服务端也是客户端,需要如下类private BluetoothSocket clientSocket;private BluetoothDevice device;// 输出流_客户端需要往服务端输出private OutputStream os;//线程类的实例private AcceptThread ac;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {// 获取本地蓝牙适配器mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();// 判断手机是否支持蓝牙if (mBluetoothAdapter == null) {Toast.makeText(this, "设备不支持蓝牙", Toast.LENGTH_SHORT).show();finish();}// 判断是否打开蓝牙if (!mBluetoothAdapter.isEnabled()) {// 弹出对话框提示用户是后打开Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(intent, 1);// 不做提示,强行打开// mBluetoothAdapter.enable();}// 初始化listviewlvDevices = (ListView) findViewById(R.id.lvDevices);lvDevices.setOnItemClickListener(this);// 获取已经配对的设备Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();// 判断是否有配对过的设备if (pairedDevices.size() > 0) {for (BluetoothDevice device : pairedDevices) {// 遍历到列表中bluetoothDevices.add(device.getName() ":" device.getAddress() "\n");}}// adapterarrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, android.R.id.text1,bluetoothDevices);lvDevices.setAdapter(arrayAdapter);//启动服务ac = new AcceptThread();ac.start();/** * 异步搜索蓝牙设备——广播接收 */// 找到设备的广播IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);// 注册广播registerReceiver(receiver, filter);// 搜索完成的广播filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);// 注册广播registerReceiver(receiver, filter);}public void btnSearch(View v) {// 设置进度条setProgressBarIndeterminateVisibility(true);setTitle("正在搜索...");// 判断是否在搜索,如果在搜索,就取消搜索if (mBluetoothAdapter.isDiscovering()) {mBluetoothAdapter.cancelDiscovery();}// 开始搜索mBluetoothAdapter.startDiscovery();}// 广播接收器private final BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// 收到的广播类型String action = intent.getAction();// 发现设备的广播if (BluetoothDevice.ACTION_FOUND.equals(action)) {// 从intent中获取设备BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);// 判断是否配对过if (device.getBondState() != BluetoothDevice.BOND_BONDED) {// 添加到列表bluetoothDevices.add(device.getName() ":" device.getAddress() "\n");arrayAdapter.notifyDataSetChanged();}// 搜索完成} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {// 关闭进度条setProgressBarIndeterminateVisibility(true);setTitle("搜索完成!");}}};// 客户端@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {// 先获得蓝牙的地址和设备名String s = arrayAdapter.getItem(position);// 单独解析地址String address = s.substring(s.indexOf(":") 1).trim();// 主动连接蓝牙try {// 判断是否在搜索,如果在搜索,就取消搜索if (mBluetoothAdapter.isDiscovering()) {mBluetoothAdapter.cancelDiscovery();}try {// 判断是否可以获得if (device == null) {// 获得远程设备device = mBluetoothAdapter.getRemoteDevice(address);}// 开始连接if (clientSocket == null) {clientSocket = device.createRfcommSocketToServiceRecord(MY_UUID);// 连接clientSocket.connect();// 获得输出流os = clientSocket.getOutputStream();}} catch (Exception e) {// TODO: handle exception}// 如果成功获得输出流if (os != null) {os.write("Hello Bluetooth!".getBytes("utf-8"));}} catch (Exception e) {// TODO: handle exception}}// 服务端,需要监听客户端的线程类private Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {Toast.makeText(MainActivity.this, String.valueOf(msg.obj),Toast.LENGTH_SHORT).show();super.handleMessage(msg);}};// 线程服务类private class AcceptThread extends Thread {private BluetoothServerSocket serverSocket;private BluetoothSocket socket;// 输入 输出流private OutputStream os;private InputStream is;public AcceptThread() {try {serverSocket = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void run() {// 截获客户端的蓝牙消息try {socket = serverSocket.accept(); // 如果阻塞了,就会一直停留在这里is = socket.getInputStream();os = socket.getOutputStream();// 不断接收请求,如果客户端没有发送的话还是会阻塞while (true) {// 每次只发送128个字节byte[] buffer = new byte[128];// 读取int count = is.read();// 如果读取到了,我们就发送刚才的那个ToastMessage msg = new Message();msg.obj = new String(buffer, 0, count, "utf-8");handler.sendMessage(msg);}} catch (Exception e) {// TODO: handle exception}}}}

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复