转自:http://blog.youkuaiyun.com/yudajun/article/details/8362916
公司项目涉及蓝牙通信,所以就简单的学了学,下面是自己参考了一些资料后的总结,希望对大家有帮助。
以下是开发中的几个关键步骤:
1,首先开启蓝牙
2,搜索可用设备
3,创建蓝牙socket,获取输入输出流
4,读取和写入数据
5,断开连接关闭蓝牙
下面是一个demo
效果图:
SearchDeviceActivity.java
- package com.hello.project;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Set;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.bluetooth.BluetoothAdapter;
- import android.bluetooth.BluetoothDevice;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Bundle;
- 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;
- public class SearchDeviceActivity extends Activity implements OnItemClickListener{
- private BluetoothAdapter blueadapter=null;
- private DeviceReceiver mydevice=new DeviceReceiver();
- private List<String> deviceList=new ArrayList<String>();
- private ListView deviceListview;
- private Button btserch;
- private ArrayAdapter<String> adapter;
- private boolean hasregister=false;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.finddevice);
- setView();
- setBluetooth();
- }
- private void setView(){
- deviceListview=(ListView)findViewById(R.id.devicelist);
- adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, deviceList);
- deviceListview.setAdapter(adapter);
- deviceListview.setOnItemClickListener(this);
- btserch=(Button)findViewById(R.id.start_seach);
- btserch.setOnClickListener(new ClinckMonitor());
- }
- @Override
- protected void onStart() {
- //注册蓝牙接收广播
- if(!hasregister){
- hasregister=true;
- IntentFilter filterStart=new IntentFilter(BluetoothDevice.ACTION_FOUND);
- IntentFilter filterEnd=new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
- registerReceiver(mydevice, filterStart);
- registerReceiver(mydevice, filterEnd);
- }
- super.onStart();
- }
- @Override
- protected void onDestroy() {
- if(blueadapter!=null&&blueadapter.isDiscovering()){
- blueadapter.cancelDiscovery();
- }
- if(hasregister){
- hasregister=false;
- unregisterReceiver(mydevice);
- }
- super.onDestroy();
- }
- /**
- * Setting Up Bluetooth
- */
- private void setBluetooth(){
- blueadapter=BluetoothAdapter.getDefaultAdapter();
- if(blueadapter!=null){ //Device support Bluetooth
- //确认开启蓝牙
- if(!blueadapter.isEnabled()){
- //请求用户开启
- Intent intent=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
- startActivityForResult(intent, RESULT_FIRST_USER);
- //使蓝牙设备可见,方便配对
- Intent in=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
- in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200);
- startActivity(in);
- //直接开启,不经过提示
- blueadapter.enable();
- }
- }
- else{ //Device does not support Bluetooth
- AlertDialog.Builder dialog = new AlertDialog.Builder(this);
- dialog.setTitle("No bluetooth devices");
- dialog.setMessage("Your equipment does not support bluetooth, please change device");
- dialog.setNegativeButton("cancel",
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- }
- });
- dialog.show();
- }
- }
- /**
- * Finding Devices
- */
- private void findAvalibleDevice(){
- //获取可配对蓝牙设备
- Set<BluetoothDevice> device=blueadapter.getBondedDevices();
- if(blueadapter!=null&&blueadapter.isDiscovering()){
- deviceList.clear();
- adapter.notifyDataSetChanged();
- }
- if(device.size()>0){ //存在已经配对过的蓝牙设备
- for(Iterator<BluetoothDevice> it=device.iterator();it.hasNext();){
- BluetoothDevice btd=it.next();
- deviceList.add(btd.getName()+'\n'+btd.getAddress());