Android 蓝牙
2016-05-04 09:21
387 查看
代码步骤
1:需要在AndroidMainfest.xml里声明蓝牙权限
2:获得BluetoothAdapter对象
3:判断当前设备中是否拥有蓝牙设备
4:判断当前设备中的蓝牙设备是否已经打开
5:得到所有已经配对的蓝牙设备对象
代码:
package com.lyapp.bluetoothapp;
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.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 MainActivity extends Activity implements OnItemClickListener {
// bluetoothAdapter.enable();
}
} else {
// 设备不支持蓝牙
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle(“No bluetooth devices”);
dialog.setMessage(“您的设备不支持蓝牙!”);
}
1:需要在AndroidMainfest.xml里声明蓝牙权限
<uses-permission android:name="android.permission.BLUETOOTH" /> 蓝牙管理权限: <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
2:获得BluetoothAdapter对象
3:判断当前设备中是否拥有蓝牙设备
4:判断当前设备中的蓝牙设备是否已经打开
5:得到所有已经配对的蓝牙设备对象
代码:
//得到BluetoothAdapter对象 BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); //判断BluetoothAdapter对象是否为空,如果为空,则表明本机没有蓝牙设备 if(adapter != null) { System.out.println("本机拥有蓝牙设备"); //调用isEnabled()方法判断当前蓝牙设备是否可用 if(!adapter.isEnabled()) { //如果蓝牙设备不可用的话,创建一个intent对象,该对象用于启动一个Activity,提示用户启动蓝牙适配器 Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(intent); } //得到所有已经配对的蓝牙适配器对象 Set<BluetoothDevice> devices = adapter.getBondedDevices(); if(devices.size()>0) { //用迭代 for(Iterator iterator = devices.iterator();iterator.hasNext();) { //得到BluetoothDevice对象,也就是说得到配对的蓝牙适配器 BluetoothDevice device = (BluetoothDevice)iterator.next(); //得到远程蓝牙设备的地址 Log.d("mytag",device.getAddress()); } } } else { System.out.println("没有蓝牙设备"); } 或者用这个套路:
package com.lyapp.bluetoothapp;
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.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 MainActivity extends Activity implements OnItemClickListener {
private ListView lv; private Button btn; private BluetoothAdapter bluetoothAdapter = null; private List<String> deviceList = new ArrayList<String>(); private ArrayAdapter<String> adapter; private boolean hasRegister = false; private DeviceReceiver receiver = new DeviceReceiver(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initBlueTooth(); } @Override protected void onStart() { // TODO Auto-generated method stub if (!hasRegister) { hasRegister = true; IntentFilter filterStart = new IntentFilter( BluetoothDevice.ACTION_FOUND); IntentFilter filterEnd = new IntentFilter( BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(receiver, filterStart); registerReceiver(receiver, filterEnd); } super.onStart(); } @Override protected void onDestroy() { // TODO Auto-generated method stub if (bluetoothAdapter != null && bluetoothAdapter.isDiscovering()) { bluetoothAdapter.cancelDiscovery(); } if (hasRegister) { hasRegister = false; unregisterReceiver(receiver); } super.onDestroy(); } private void initBlueTooth() { bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter != null) { // 确认开启蓝牙 if (!bluetoothAdapter.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);// 可见持续200秒,不能超过200秒 startActivity(in); // 直接开启,不经过提示
// bluetoothAdapter.enable();
}
} else {
// 设备不支持蓝牙
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle(“No bluetooth devices”);
dialog.setMessage(“您的设备不支持蓝牙!”);
dialog.setNegativeButton("确认", null); dialog.show(); } } private void initView() { lv = (ListView) findViewById(R.id.lv); btn = (Button) findViewById(R.id.btn); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, deviceList); lv.setAdapter(adapter); lv.setOnItemClickListener(this); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub // isDiscovering()--是否正在处于扫描过程中,如果蓝夜没有开启,该方法会返回false if (bluetoothAdapter.isDiscovering()) { bluetoothAdapter.cancelDiscovery();// 取消扫描过程 btn.setText("重新搜索"); } else { bluetoothAdapter.startDiscovery(); findAvalibleDevice(); btn.setText("停止搜索"); } } }); } /** * 查找蓝牙设备 */ private void findAvalibleDevice() { // 获取可配对蓝牙设备 Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices(); if (bluetoothAdapter != null && bluetoothAdapter.isDiscovering()) { deviceList.clear(); adapter.notifyDataSetChanged(); } if (devices.size() > 0) {// 存在已经配对过的蓝牙设备 for (Iterator<BluetoothDevice> it = devices.iterator(); it .hasNext();) { BluetoothDevice btd = it.next(); deviceList.add(btd.getName() + "\n" + btd.getAddress()); adapter.notifyDataSetChanged(); } } else { // 不存在已经匹配过的蓝牙设备 deviceList.add("没有已经匹配的蓝牙设备"); adapter.notifyDataSetChanged(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub switch (resultCode) { case RESULT_OK: findAvalibleDevice(); break; case RESULT_CANCELED: break; } super.onActivityResult(requestCode, resultCode, data); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub final String msg = deviceList.get(position); if(bluetoothAdapter!=null&&bluetoothAdapter.isDiscovering()){ bluetoothAdapter.cancelDiscovery(); btn.setText("重新搜索"); } //弹出框 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("是否连接设备"); builder.setMessage(msg); builder.setPositiveButton("连接", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub BluetoothMsg.bluetoothAddress = msg.substring(msg.length()-17); if(BluetoothMsg.lastBluetoothAddress!=BluetoothMsg.bluetoothAddress){ BluetoothMsg.lastBluetoothAddress = BluetoothMsg.bluetoothAddress; } Intent in = new Intent(MainActivity.this,BlueToothAddressActivity.class); startActivity(in); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub BluetoothMsg.bluetoothAddress = null; } }); builder.show(); } /** * 蓝牙搜索状态广播监听 * * @author Administrator * */ private class DeviceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { // 搜索到设备 BluetoothDevice device = intent .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // 搜索没有匹配到的设备 if (device.getBondState() != BluetoothDevice.BOND_BONDED) { deviceList.add(device.getName() + "\n" + device.getAddress()); adapter.notifyDataSetChanged(); } } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED .equals(action)) { if (lv.getCount() == 0) { deviceList.add("没有可以连接的蓝牙设备"); adapter.notifyDataSetChanged(); } btn.setText("重新搜索"); } } }
}
相关文章推荐
- 开始你的测试
- 拍照(连续拍照 焦距 压缩图像)
- Android中shape的使用
- Android EditText不弹出输入法焦点问题的总结
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory
- Android 项目的目录结构
- Android中如何避免ANR
- android 打开新窗口
- Android Studio 快捷键总结(OS X)
- Android的EditText自动获取焦点并弹出输入法问题
- Android学习笔记-APK反编译
- Android EventBus源码解析 带你深入理解EventBus
- 矩阵, 矩阵 , Android基础控件之ImageView
- eciplise android 出现导入不了layout文件的解决方法
- Android 模拟器的创建
- Android_Proguard代码混淆器
- android:layout_weight详解(转)
- Android API与系统对应表
- 自定义View:如果想对一个Android中已经存在的控件进行自定义的 话,可以有两个种方法
- Android中的ClassLoader与dex文件加密实现分析