Articles of 蓝牙

Android – startActivityForResult之外的一个活动?

我有一个包装类(BluetoothDiscoverer)在服务中实例化。 此类获得BluetoothAdapter并在扫描邻居设备之前检查是否启用了蓝牙。 现在,如果蓝牙没有启用,我希望能够在这个类(BluetoothDiscoverer)内做到以下几点: Intent enableBluetoothIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER); 现在我已经读了这个: 从非活动使用startActivityForResult 但我不想将我的主要活动传递给此对象,因为我想处理在BluetoothDiscoverer类中的结果(无论用户是否接受启用蓝牙)。 现在如果我使BluetoothDiscoverer成为Activity的一个子类 当startActivityForResult即将被调用时,我似乎正在得到一个NullPointerException。 我认为这是因为我需要添加一个onCreate()/ onDestroy()方法,但是这样做打破了我所做的目的,因为我需要能够调用实例化此类的服务中的BluetoothDiscoverer对象上的方法。 我还需要注册一个广播接收机,用于在启动扫描时检索相邻设备。 如果BluetoothDiscoverer类不是一个活动,我该如何注册这个接收器? 有没有解决这个问题? 谢谢安德烈亚斯

Android蓝牙IOException:连接被拒绝

好的,这是交易。 我有两个启用蓝牙的Galaxy Nexus手机。 我写了一个蓝牙连接pipe理应用程序,用于设备发现和连接。 它还输出设备可以支持的所有可用的UUID。 从http://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm看 ,以下标准UUID是从Galaxy Nexus设备公开的。 0x1116 – NAP 0x112f – PBAP(电话簿访问configuration文件) 0x111f – HFP(免提) 0x1105 – OPP(对象推送configuration文件) 0x1112 – HSP(耳机configuration文件) 0x110c – AVRCP 0x110a – A2DP 我试图通过OPPconfiguration文件( UUID 00001105-0000-1000-8000-00805F9B34FB )连接并在设备之间推送对象(文件)。 我已经去了整个Android API文档 ,如何发现,配对/绑定(线程等)和pipe理所有的蓝牙连接。 我已经设法通过SPP(0x1101)configuration文件成功连接并与传统主板设备通话。 然而,当我尝试使用两个银河联系电话之间的socket.connect() ,配对对话框显示出来,我点击两个设备上的Pairbutton。 之后,我立即得到一个Connection Refused IOException 。 请注意,配对发生后,我再也不会再问到什么是有道理的,因为安全链接被caching。 如果我无法使用这些标准UUID连接到这些标准configuration文件,为什么它们暴露? 如何从我的应用程序连接到这些configuration文件中的任何一个并与它们交互? 是否因为我的应用程序不是某种可信的? 奇怪的是,即使Android上的Sharefunction也根本不起作用。 这是什么东西在Android上完全破碎? 请避免给我提示使用“众所周知的UUID SPP一个0x1101”像文档说。 这不是我想要的。 我对这个东西是如何工作有一个相当好的理解,我正在寻找一个真正的解决scheme或问题的解释。 我已经看到了典型的“反思”解决scheme,但我不明白为什么这仍然是Android上的问题? 为什么人们使用反思来完成这项工作? […]

Android:蓝牙无法获取端口号

我遇到了一个问题,在我的应用程序中使用蓝牙。 似乎在创build了28个BluetoothSocket / BluetoothServerSockets之后,所有的端口都被占用了。 不需要同时打开sockets,因为启用了蓝牙function,sockets只有28个。 这可以使用Android示例中提供的BluetoothChat示例进行重现。 只需打开和closures应用程序15次(应用程序每次创build2个套接字)。 在第15次,它会崩溃,并将继续崩溃,直到您禁用,然后重新启用蓝牙: 12-06 18:43:58.177: E/BluetoothSocket(18530): bindListen, fail to get port number, exception: java.io.IOException: read failed, socket might closed, read ret: -1 12-06 18:43:58.193: E/BluetoothChatService(18530): Socket Type: Insecurelisten() failed 12-06 18:43:58.193: E/BluetoothChatService(18530): java.io.IOException: Error: -1 12-06 18:43:58.193: E/BluetoothChatService(18530): at android.bluetooth.BluetoothAdapter.createNewRfcommSocketAndRecord(BluetoothAdapter.java:1035) 12-06 18:43:58.193: E/BluetoothChatService(18530): at android.bluetooth.BluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(BluetoothAdapter.java:982) 12-06 18:43:58.193: E/BluetoothChatService(18530): at com.example.android.BluetoothChat.BluetoothChatService$AcceptThread.<init>(BluetoothChatService.java:280) […]

Android 4.4.4 Moto G蓝牙LE重新连接问题

我有一个应用程序,在运行Android 4.3的三星S3上效果很好,但是我在运行4.4.4的Moto G上遇到了问题 我的BLE外围设备在应用程序使用期间连接和断开多次。 这工作正常,但有时有一个点,应用程序/手机不再重新连接到外设。 所有的gatt命令都在主线程上运行,例如。 final BluetoothGatt gat = gatt; Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { // This code will be executed on the main thread if (Looper.myLooper() == Looper.getMainLooper()) { Log.e(TAG, "mGattCallback disconnect2: NOW ON MAIN THREAD :)"); } gat.disconnect(); } }); 和外设断开罚款。 当发生这种情况,我不能重新连接到外设了,我得到这样的日志负载: 04-07 16:57:56.798: […]

以编程方式连接到配对的蓝牙扬声器并播放audio

在我们的应用程序中,我想连接到以前配对的A2DP蓝牙扬声器,并使用Android v4.2或更高版本直接播放audio。 我可以使用以下代码成功创build一个A2DPconfiguration文件对象来启动该过程: /* Manifest permissions */ <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> // Get the default adapter BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // Establish connection to the proxy. mBluetoothAdapter.getProfileProxy(this, mProfileListener, BluetoothProfile.A2DP) 以及下面的监听器响应连接: private BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() { public void onServiceConnected(int profile, BluetoothProfile proxy) { if (profile == BluetoothProfile.A2DP) { mBluetoothSpeaker = (BluetoothA2dp) proxy; // no […]

如何区分Android中编程连接的蓝牙设备?

无论是蓝牙耳机还是手机? 如何在android代码中区分bluetooth headset和bluetooth enabled android设备。 我正在开发一个小应用程序,因为我有一个通过蓝牙阻止数据传输的function,但它需要通过蓝牙耳机进行通信。 我提到的例子和代码,他们build议我只配对/取消配对蓝牙设备。 Android:如何以编程方式配对蓝牙设备? or else 获取所有连接的设备。 在Android中,如何获取连接的蓝牙设备的configuration文件? 是否可以在与设备连接types有关的设备中获得任何广播消息? 请帮助我区分连接的蓝牙设备为耳机/ Android设备(手机)等。 先谢谢你。

使Android 2.1上的蓝牙无限期发现

我正在研究一个涉及蓝牙和Android操作系统的研究项目。 我需要无限期地发现蓝牙,以便继续进行项目。 问题: Android将发现限制在300秒内。 因为我的应用程序devise为在后台运行而不打扰用户,所以我不能每隔300秒就要求用户重新启用发现function。 据我所知 ,没有办法通过Android的GUI来增加时间。 一些消息来源称这是一个安全function,其他人称这是一个错误。 两者都可能有一些事实 我在试着/试过了: 我试图编辑一个稳定版本的cyanogenmod来closures发现定时器(这是可能的;有一个configuration文件需要改变一个单一的数字)。 这是行不通的,因为我对最终的软件包有validation问题。 在过去的一周里,我下载了这个cyanogenmod源代码 ,更换了一个相关的类,希望它能使蓝牙无限期地被发现,并尝试重新编译。 这是行不通的,因为(a)repo经常被改变,导致不能编译的不稳定的代码库(OR,可能是因为我错误地使用了它;只是因为它看起来是代码的错(b)回购决定定期“忽略”我(但并不总是,因为我之前已经获得了代码基础!),回答我的同步问题/连接尝试与: 致命的:远端意外挂断 正如你所想的那样,上述两个问题是有问题的,而且很令人沮丧。 更多信息: 我通过cyanogenmod(v5我相信)运行Android 2.1。 这意味着电话也扎根了。 我有一个开发者手机,这意味着引导程序被解锁。 我的手机是HTC Magic(32B)。 大问题: 我如何使Android在Android上无限期地发现?

蓝牙文件交换完全安全吗?

当我通过蓝牙传输文件时,可能会遇到什么样的攻击? 此外,Android手机之间通过蓝牙encryption传输的文件?

Android蓝牙接受()/连接()与已配对的设备

我无法通过蓝牙连接两个Android设备,只有在配对之前才会发生这种情况。 我正在运行一个作为服务器,另一个作为客户端。 这里是服务器端的一系列事情: 检查各种蓝牙状态(适配器可用,已启用等)。 使用我select的预定义的UUID调用listenUsingRfcommWithServiceRecord()。 请求使设备可发现 由于可被发现asynchronous发生,我调用accept()并等待传入​​的连接。 在客户端: 检查各种蓝牙状态(适配器可用,已启用等)。 对于getBondedDevices()中的每个设备,我将getName()与服务器名称进行比较。 如果有匹配,请跳到步骤6。 开始BT发现 对于每个发现的设备(请注意,来自2a的配对设备不会在此显示),请将设备名称与服务器名称进行比较。 如果有匹配,请转到步骤6。 取消发现 在步骤2中find的设备上,使用与服务器端使用的相同的预定义UUID调用createRfcommSocketToServiceRecord()。 调用connect()并等待它返回一个连接的套接字。 当客户端和服务器从未配对过时,上述过程对我来说工作得非常好。 但是,在Android注册到设备列表后,它们将不可避免地在connect()/ accept()阶段超时。 我一直在寻找一个解决scheme几天,并尝试了很多东西,包括这一个: 连接到已经配对的蓝牙设备 reflection方法也不适用于我。 看起来connect()会立即返回,但是当我尝试getOutputStream()时,我得到一个exception。 在accept()方面,它甚至不logging有人试图连接。 我认真地需要一些帮助或指示,让设备build立连接,一旦他们以前配对。 这里是关于设备的一些信息: 我正在testing两台LG G2X手机上的服务器和客户端。 他们两个都运行在Android 2.3.3上,对应于API级别10。 再次,上述工作后我手动解除设备设置。 提前谢谢你。 我在Android和蓝牙上大概有两个星期的时间,所以如果你看到任何缺失的步骤或最佳做法,请将它们指出来。

让一个Android手机构成一个蓝牙input设备(鼠标或键盘)

是否有可能使一个Android手机应用程序,将使手机实现和广播所需的数据构成蓝牙鼠标,以便其他设备(PC,XBOX,PS,其他Android设备)可以识别为鼠标或键盘?