这段 安卓软件中的代码中如何判断 手机是不是连接到 蓝牙设备

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这段 安卓软件中的代码中如何判断 手机是不是连接到 蓝牙设备相关的知识,希望对你有一定的参考价值。

public class BluetoothConnection

static BluetoothSocket btSock = null;

public static void closeConnection()

if (btSock == null)
return;
try

btSock.getInputStream().close();
btSock.getOutputStream().close();
btSock.close();
btSock = null;
return;

catch (IOException localIOException)




public static int doTelescopeCommand(byte[] paramArrayOfByte1, int paramInt1, byte[] paramArrayOfByte2, int paramInt2, byte paramByte, int paramInt3)

int i = Telescope.TEL_SERIAL_READ_ERROR;
byte[] arrayOfByte = new byte[256];
try

OutputStream localOutputStream = btSock.getOutputStream();
InputStream localInputStream = btSock.getInputStream();
while (true)

i = Telescope.TEL_SERIAL_WRITE_ERROR;
if ((paramInt1 > 0) && (paramArrayOfByte1 != null))

localOutputStream.write(paramArrayOfByte1);
localOutputStream.flush();

if (paramInt2 < 1)
return Telescope.TEL_NO_ERROR;
do

int k = localInputStream.available();
if (k >= 1);
localInputStream.read(arrayOfByte, 0, Math.min(k, 256));
continue;
long l = System.currentTimeMillis() + paramInt3;
i = Telescope.TEL_SERIAL_READ_ERROR;
int j = 0;
if (System.currentTimeMillis() >= l)
i = Telescope.TEL_TIMEOUT_ERROR;
while (true)。。。。。 还有不少代码,自己只能看懂个大概

参考技术A 安卓蓝牙中。要连接其他设备要调用connect()函数。。此函数你可以去看一下,官方说的是:若连接成功,就不会产生异常。不成功,就会产生异常。。。所以看看程序会运行异常不。运行了,说明没有连接成功。没运行,则连接成功了。
try
// 连接
connect(device);
catch (IOException e)
Toast.makeText(MainActivity.this, "没有成功连接设备", //1
Toast.LENGTH_SHORT).show();


若成功了,不会运行1,不成功,就会产生异常。运行异常中的程序,也就是代码1.
参考技术B android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发。
1. 首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限
// 管理蓝牙设备的权限
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" />
// 使用蓝牙设备的权限
<uses-permissionandroid:name="android.permission.BLUETOOTH" />
2.打开蓝牙
获得蓝牙适配器(android.bluetooth.BluetoothAdapter),检查该设备是否支持蓝牙,如果支持,就打开蓝牙。
[java]
// 检查设备是否支持蓝牙
adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null)

// 设备不支持蓝牙

// 打开蓝牙
if (!adapter.isEnabled())

Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
// 设置蓝牙可见性,最多300秒
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
context.startActivity(intent);

// 检查设备是否支持蓝牙
adapter = BluetoothAdapter.getDefaultAdapter();
if (adapter == null)

// 设备不支持蓝牙

// 打开蓝牙
if (!adapter.isEnabled())

Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
// 设置蓝牙可见性,最多300秒
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
context.startActivity(intent);

3.获取已配对的蓝牙设备(android.bluetooth.BluetoothDevice)
首次连接某蓝牙设备需要先配对,一旦配对成功,该设备的信息会被保存,以后连接时无需再配对,所以已配对的设备不一定是能连接的。
[java]
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> devices = adapter.getBondedDevices();
for(int i=0; i<devices.size(); i++)

BluetoothDevice device = (BluetoothDevice) devices.iterator().next();
System.out.println(device.getName());

BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> devices = adapter.getBondedDevices();
for(int i=0; i<devices.size(); i++)

BluetoothDevice device = (BluetoothDevice) devices.iterator().next();
System.out.println(device.getName());

4.搜索周围的蓝牙设备
适配器搜索蓝牙设备后将结果以广播形式传出去,所以需要自定义一个继承广播的类,在onReceive方法中获得并处理蓝牙设备的搜索结果。
[java]
// 设置广播信息过滤
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
// 注册广播接收器,接收并处理搜索结果
context.registerReceiver(receiver, intentFilter);
// 寻找蓝牙设备,android会将查找到的设备以广播形式发出去
adapter.startDiscovery();
// 设置广播信息过滤
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
// 注册广播接收器,接收并处理搜索结果
context.registerReceiver(receiver, intentFilter);
// 寻找蓝牙设备,android会将查找到的设备以广播形式发出去
adapter.startDiscovery(); 自定义广播类
[java]
private BroadcastReceiver receiver = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action))
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(device.getName());



private BroadcastReceiver receiver = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action))
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(device.getName());



5.蓝牙设备的配对和状态监视
[java]
private BroadcastReceiver receiver = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action))
// 获取查找到的蓝牙设备
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(device.getName());
// 如果查找到的设备符合要连接的设备,处理
if (device.getName().equalsIgnoreCase(name))
// 搜索蓝牙设备的过程占用资源比较多,一旦找到需要连接的设备后需要及时关闭搜索
adapter.cancelDiscovery();
// 获取蓝牙设备的连接状态
connectState = device.getBondState();
switch (connectState)
// 未配对
case BluetoothDevice.BOND_NONE:
// 配对
try
Method createBondMethod = BluetoothDevice.class.getMethod("createBond");
createBondMethod.invoke(device);
catch (Exception e)
e.printStackTrace();

break;
// 已配对
case BluetoothDevice.BOND_BONDED:
try
// 连接
connect(device);
catch (IOException e)
e.printStackTrace();

break;


else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action))
// 状态改变的广播
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device.getName().equalsIgnoreCase(name))
connectState = device.getBondState();
switch (connectState)
case BluetoothDevice.BOND_NONE:
break;
case BluetoothDevice.BOND_BONDING:
break;
case BluetoothDevice.BOND_BONDED:
try
// 连接
connect(device);
catch (IOException e)
e.printStackTrace();

break;





private BroadcastReceiver receiver = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action))
// 获取查找到的蓝牙设备
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(device.getName());
// 如果查找到的设备符合要连接的设备,处理
if (device.getName().equalsIgnoreCase(name))
// 搜索蓝牙设备的过程占用资源比较多,一旦找到需要连接的设备后需要及时关闭搜索
adapter.cancelDiscovery();
// 获取蓝牙设备的连接状态
connectState = device.getBondState();
switch (connectState)
// 未配对
case BluetoothDevice.BOND_NONE:
// 配对
try
Method createBondMethod = BluetoothDevice.class.getMethod("createBond");
createBondMethod.invoke(device);
catch (Exception e)
e.printStackTrace();

break;
// 已配对
case BluetoothDevice.BOND_BONDED:
try
// 连接
connect(device);
catch (IOException e)
e.printStackTrace();

break;


else if(BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action))
// 状态改变的广播
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device.getName().equalsIgnoreCase(name))
connectState = device.getBondState();
switch (connectState)
case BluetoothDevice.BOND_NONE:
break;
case BluetoothDevice.BOND_BONDING:
break;
case BluetoothDevice.BOND_BONDED:
try
// 连接
connect(device);
catch (IOException e)
e.printStackTrace();

break;




6.蓝牙设备的连接
[java]
private void connect(BluetoothDevice device) throws IOException
// 固定的UUID
final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";
UUID uuid = UUID.fromString(SPP_UUID);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid);
socket.connect();

private void connect(BluetoothDevice device) throws IOException
// 固定的UUID
final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";
UUID uuid = UUID.fromString(SPP_UUID);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid);
socket.connect();

如何将 HTC 安卓手机连接到电脑作为调试设备

【中文标题】如何将 HTC 安卓手机连接到电脑作为调试设备【英文标题】:How to connect a HTC android phone to the pc as debugging device 【发布时间】:2010-11-04 17:48:03 【问题描述】:

我想将 HTC Desire 仅作为调试设备连接到电脑。 每次我插入数据线时,它都会在电脑上搜索 HTC Sync 软件,这需要很长时间,直到手机上最终出现一条消息,例如“找不到 HTC Sync,...请安装...”。之后,手机就可以eclipse进行调试了。但是我怎样才能避免这个永恒的搜索过程呢?

【问题讨论】:

那么问题出在哪里?你已经接受了我的回答,但我真的很好奇你为什么会遇到这个问题。 好吧,我仍然不知道为什么每次连接手机都必须等待 HTC Sync,而且我对这里给出的所有答案都不是很满意。我的连接工作正常,驱动程序没有问题。我只是想知道其他人是否也遇到了 HTC Sync 的麻烦。但似乎我是唯一一个对这个搜索过程感到恼火的人。所以我决定尝试安装 HTC Sync 软件。如果您遇到另一种解决此问题的方法,如果您让我知道,我会很高兴... 通常在这种困难的情况下,问题不是由您直接使用的程序引起的。在这种特殊情况下,问题可能是由您在 HTC 上安装的某些应用程序引起的。也检查一下Android Logcat,也许你会找到线索。 【参考方案1】:

以下是从this page 复制的。非常适合我。请记住按照 Android 文档中描述的过程如何连接设备进行调试。

HTC 的愿望适用于 ADB 驱动程序的 v3 版本 - 无需安装 HTC Sync。将这些行添加到 android_winusb.inf:

[Google.NTx86] ;HTC 渴望 %SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87 %CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87&MI_01

[Google.NTamd64] ;HTC 渴望 %SingleAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87 %CompositeAdbInterface% = USB_Install, USB\VID_0BB4&PID_0C87&MI_01

【讨论】:

谢谢,我知道我不需要安装 HTC Sync!正如我所写,我唯一的问题是,在 HTC 的愿望上,只有四个选项“HTC Sync”、“仅充电”、“硬盘”、“USB 连接(移动网络)”。除了“HTC Sync”之外,这些选项都不适用于调试。如果我选择它,“Android设备选择器”会找到手机,但手机会在电脑上搜索HTC软件... 或者您给出的解决方案是否意味着手机不进行搜索?我试试看…… 嗯,我试过了......这并没有改变任何东西......我仍然需要等到搜索完成 对我来说,“仅收费”选项有效。据我记得“磁盘驱动器”也有效。如果没有上述修改,Android SDK USB 驱动程序无法找到我的 HTC Desire。所以我有两个选择:(1)在我的电脑上安装 HTC Sync(2)修复 Android USB 驱动程序。 也许您安装了 HTC 驱动程序后端,需要将其删除,以便停止寻找前端同步软件?【参考方案2】:

尝试为您的设备选择“仅充电”连接模式作为默认连接。现在,您似乎选择了默认同步的内容。

设置 -> 连接到 PC -> 默认连接类型

【讨论】:

谢谢,但你试过吗?如果您选择“仅充电”选项,则找不到任何 Android 设备! 好吧,我通常不使用 Windows。但在 Linux 上绝对有效。我还记得当我尝试使用 Window 时,我的 Desire 并没有使用 SDK 驱动程序,直到我从设备闪存卡安装了一些东西。可能 HTC 有自己的驱动程序,或者您只需安装该同步应用程序即可使其正常工作。 myhtcdesire.com/tutorials/… 这里是关于如何为 HTC 安装驱动程序的手册。最后有我猜的替代驱动程序的链接。【参考方案3】:

在 Android 2.2 中,它的设置 -> 应用程序 -> 开发 -> USB 调试(启用)。

【讨论】:

我知道 - 当然,USB 调试已启用,并且可以正常工作(正如我在上面所写的)。但它每次都会搜索 HTC Sync!

以上是关于这段 安卓软件中的代码中如何判断 手机是不是连接到 蓝牙设备的主要内容,如果未能解决你的问题,请参考以下文章

如何安装巧克力与香子兰的安卓版?

安卓手机跟电脑连接,用哪个软件好,搜索不到?

Gnirehtetadb安卓手机通过USB连接到电脑上网

无法连接到recaptcha服务

连接到安卓手机的usb主机设备必须是arduino吗?

怎么关安卓手机照相机声音