❶ android蓝牙开发程序一进入线程就崩溃,线程代码如下
安卓的线程分为UI线程和工作线程,一般的只有主线程属于UI线程,其它新建的线程都属于工作线程,对UI的操作只能够放到UI线程中进行,当然SurfaceView比较的特殊,对SurfaceView的UI操作是可以放到工作线程中进行的,楼主的这种情况一般可以通过在主线程中建立一个 Hander,然后再在工作线程中通过这个Handler发送消息,主线程的Handler的回调事件收到了消息后,在回调事件中调用;Toast.makeText(MainActivity.this, i, Toast.LENGTH_SHORT).show(); 就可以了,
希望对你有用,我是ndk吧吧主,有问题可以到ndk吧留言,!
❷ android怎么来判断蓝牙开、关的状态求代码
Android 蓝牙编程的基本步骤:
获取蓝牙适配器BluetoothAdapterblueadapter=BluetoothAdapter.getDefaultAdapter();
如果BluetoothAdapter 为null,说明android手机没有蓝牙模块。
判断蓝牙模块是否开启,blueadapter.isEnabled() true表示已经开启,false表示蓝牙并没启用。
启动配置蓝牙可见模式,即进入可配对模式Intentin=newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,200);
startActivity(in); ,200就表示200秒。
获取蓝牙适配器中已经配对的设备Set<BluetoothDevice>device=blueadapter.getBondedDevices();
还需要在androidManifest.xml中声明蓝牙的权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
接下来就是根据自己的需求对BluetoothAdapter的操作了。
❸ Android开发 蓝牙连接问题
Android 蓝牙编程的基本步骤:
1.获取蓝牙适配器BluetoothAdapter blueadapter=BluetoothAdapter.getDefaultAdapter();
如果BluetoothAdapter 为null,说明android手机没有蓝牙模块。
判断蓝牙模块是否开启,blueadapter.isEnabled() true表示已经开启,false表示蓝牙并没启用。
2.启动配置蓝牙可见模式,即进入可配对模式Intent in=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
in.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 200);
startActivity(in); ,200就表示200秒。
3.获取蓝牙适配器中已经配对的设备Set<BluetoothDevice> device=blueadapter.getBondedDevices();
4.还需要在androidManifest.xml中声明蓝牙的权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
接下来就是根据自己的需求对BluetoothAdapter 的操作了。
❹ 如何使用Android蓝牙开发
Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输。本文档描述了怎样利用android平台提供的蓝牙API去实现蓝压设备之间的通信。蓝牙具有point-to-point 和 multipoint两种连接功能。
使用蓝牙API,可以做到:
* 搜索蓝牙设备
* 从本地的Bluetooth adapter中查询已经配对的设备
* 建立RFCOMM通道
* 通过service discovery连接到其它设备
* 在设备之间传输数据
* 管理多个连接
基础知识
本文档介绍了如何使用Android的蓝牙API来完成的四个必要的主要任务,使用蓝牙进行设备通信,主要包含四个部分:蓝牙设置、搜索设备(配对的或可见的)、连接、传输数据。
所有的蓝牙API在android.bluetooth包中。实现这些功能主要需要下面这几个类和接口:
BluetoothAdapter
代表本地蓝牙适配器(蓝牙发射器),是所有蓝牙交互的入口。通过它可以搜索其它蓝牙设备,查询已经配对的设备列表,通过已知的MAC地址创建BluetoothDevice,创建BluetoothServerSocket监听来自其它设备的通信。
BluetoothDevice
代表了一个远端的蓝牙设备, 使用它请求远端蓝牙设备连接或者获取 远端蓝牙设备的名称、地址、种类和绑定状态。 (其信息是封装在 bluetoothsocket 中) 。
BluetoothSocket
代表了一个蓝牙套接字的接口(类似于 tcp 中的套接字) ,他是应用程 序通过输入、输出流与其他蓝牙设备通信的连接点。
BluetoothServerSocket
代表打开服务连接来监听可能到来的连接请求 (属于 server 端) , 为了连接两个蓝牙设备必须有一个设备作为服务器打开一个服务套接字。 当远端设备发起连 接连接请求的时候,并且已经连接到了的时候,Blueboothserversocket 类将会返回一个 bluetoothsocket。
BluetoothClass
描述了一个设备的特性(profile)或该设备上的蓝牙大致可以提供哪些服务(service),但不可信。比如,设备是一个电话、计算机或手持设备;设备可以提供audio/telephony服务等。可以用它来进行一些UI上的提示。
BluetoothProfile
BluetoothHeadset
提供手机使用蓝牙耳机的支持。这既包括蓝牙耳机和免提(V1.5)模式。
BluetoothA2dp
定义高品质的音频,可以从一个设备传输到另一个蓝牙连接。 “A2DP的”代表高级音频分配模式。
BluetoothHealth
代表了医疗设备配置代理控制的蓝牙服务
BluetoothHealthCallback
一个抽象类,使用实现BluetoothHealth回调。你必须扩展这个类并实现回调方法接收更新应用程序的注册状态和蓝牙通道状态的变化。
❺ 安卓apk开发了一个蓝牙连接状态监控软件,当蓝牙的连接断开的时候,能够触发一个响铃事件,应该怎么编写
蓝牙没用过。用广播一直判断蓝牙的链接状态吧,只是这样想。
❻ Android怎么检测蓝牙的连接状态如果一段断开,我这边怎么检测得到
按照蓝牙规范,一旦超时连接断开,会返回上层Disconnect complete Event with reason code: supervision timeout.可以根据该原因码,检测连接状态,具体方法为:
1、BluetoothAdapter 顾名思义,蓝牙适配器,直到建立bluetoothSocket连接之前,都要不断操作它BluetoothAdapter里的方法很多,常用的有以下几个:cancelDiscovery() 根据字面意思,是取消发现,也就是说当正在搜索设备的时候调用这个方法将不再继续搜索disable()关闭蓝牙enable()打开蓝牙,这个方法打开蓝牙不会弹出提示,更多的时候需要问下用户是否打开,一下这两行代码同样是打开蓝牙,不过会提示用户:Intemtenabler=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler,reCode);//同startActivity(enabler);
getAddress()获取本地蓝牙地址getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdaptergetName()获取本地蓝牙名称。
2、getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备getState()获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要)isDiscovering()判断当前是否正在查找设备,是返回true***isEnabled()判断蓝牙是否打开,已打开返回true,否则,返回false***(String name,UUID uuid)根据名称,UUID创建并返回BluetoothServerSocket,这是创建BluetoothSocket服务器端的第一步startDiscovery()开始搜索,这是搜索的第一步2.BluetoothDevice看名字就知道,这个类描述了一个蓝牙设备(UUIDuuid)根据UUID创建并返回一个BluetoothSocket这个方法也是我们获取BluetoothDevice的目的——创建BluetoothSocket
这个类其他的方法,如getAddress(),getName(),同BluetoothAdapter。
❼ Android怎样监听蓝牙耳机的按键事件
其实对于Android系统,每次按键只会有一个唯一“键值”响应,使用起来感觉会模模糊糊的,但是其实对于系统来说是很清晰的。
AVRCP全称(Audio/VideoRemoteControlProfile),是蓝牙协议中的一个profile。从名字上就可以看出主要应用于Audio/Video控制。每个按键并不是独立的,上-曲/下一曲是在正在播放音乐的时候才会有效,即才会向Android发送“键值”。
基于按键从Linux到Android分析具体对于的键值:
Linux扫描码功能映射字串Android键值
00c8200 开始放音乐MEDIA_PLAYKEYCODE_MEDIA_PLAY
00c9201 停止放音乐MEDIA_PAUSEKEYCODE_MEDIA_PAUSE
00a3163 下一曲MEDIA_NEXTKEYCODE_MEDIA_NEXT
00a5165 上-曲MEDIA_PREVIOUSKEYCODE_MEDIA_PREVIOUS
Android应用代码,完整测试应用:TeskKey。
总结:1号键会交替发送KEYCODE_MEDIA_PLAY/KEYCODE_MEDIA_PAUSE;2/3号键会在播放音乐时分别发送KEYCODE_MEDIA_PREVIOUS/.KEYCODE_MEDIA_NEXT。如果想要把蓝牙耳机上的按键利用起来,可以在接收到KEYCODE_MEDIA_PLAY时播放无声音乐以使能2/3号键。这样就能完整接收3种键值了自行控制了。这个具体自行设计(测试代码已经更新包含了)。
注:这种实现并不一定通用,比如我在深度定制的MIUI中测试,尽管启动的TestKey应用,系统自带的音乐播放器仍然能同时响应键值。
更新:
已经更新TestKey源码,添加对蓝牙耳机按键的监听,实现方法就是上述中推测的方法,已经成功验证过了。播放音乐参考《Android多媒体开发--资源文件播放》。效果图:
问与答
1.这个只能在播放音乐的状态下才能监听到么?
答:根据上述的原理,这些按键也仅仅是应用在控制媒体时使用;且根据实际验证没有播放音乐时蓝牙耳机的2/3号键是并没有向Android设备发送键值(从底层Linux来看)。综上所述,需要通过播放音乐来实现激活其向Android设备发送键值,针对这种情况可以播放一个“没有声音”的音乐文件来实现,这样既可以监听到2/3号键又可以不影响其它声音的输出。可以在前台时播放音乐,后台停止播放。
2.我现在主要是想监听得到开关键(1号键)。 在做一个按下蓝牙开关键后启动一个语音识别的功能?
答:在我的测试条件下,1号键是可以正常监听到的。1号键会交替发送KEYCODE_MEDIA_PLAY/KEYCODE_MEDIA_PAUSE键值。这个键不需要模拟播放音乐就可以正常的监听到。
3.4号按键的监听方法
答:所谓的4号按键,也就是指本文中的所测试型号的蓝牙耳机上并没有,但有可能其它型号的蓝牙耳机上有。我没有办法测试验证,所以这里就简单叙述一下“新按键”的键值确定思路:1.先使用TestKey测试应用测试按键,测试Android上层是否可以得到对应键值。2.如果没有得到,那么就使用adbshellgetevent来看Linux底层可以不可以得到键值。然后根据按键从Linux到Android来确定Android上层使用的键值码到底是多少。(当然,如果你实在不知道如何监听,把蓝牙耳机寄给我,我给你确定也行。:))
注:其实上述文章完全是根据按键从Linux到Android测试确定下来的。那是篇文章是剥开Android外壳来看“按键”事件的流程的,方法适用于所有输入事件:各种按键/触摸/物理键盘/鼠标等待输入设备。没有一定的Linux开发经验很难看懂和理解。
4.Android后台监听按键怎么实现
或:如何启动一次应用后在后台一直监听播放键因为有这样一个场景在用户开车的时候需按一下开关键就启动语音识别的功能。
这个问题其实已经超出了本文讨论的范围,是Android系统对应用层的键盘事件(按键)的分发的问题了。正常情况下,按键只会向当前最端的应用分发键盘事件,也就是说在后台你边音量键都监听不了。
但是既然这种情况(后台应用监听按键)的需求存在,那么就一定有它存在的道理。比如“相机键”,按下后直接调出相机到最前台。从表面上看是相机响应了按键,但是从实现方法上来看,并不是通过键值来操作,必须通过其它方法,比如广播或者其它等等。
明白了其中的道理后,那么想要实现就好办了。先看这个按键有没有广播,如要有接听系统中发出来的广播;如果没有那么对于定制系统可以自己在系统中添加一个广播;总之,正常渠道是没有办法在后台监听一些不应该是你监听到的按键的。
更:查了一下,这个按键是有广播的。这样就可以后台响应了(不需要C/不需要root)。例子我就不试了,见Android官方例子RandomMusicPlayer。
其中的重点是这个广播android.intent.action.MEDIA_BUTTON。
❽ android 监听蓝牙有没有开启
刚看了sdk,发现有个:android.bluetooth.BluetoothAdapter.ACTION_STATE_CHANGED 这是个广播 Broadcast Action: The state of the local Bluetooth adapter has been changed. For example, Bluetooth has been turned on or off. 可以监听到蓝牙打开和关闭。想要更多的自己去查查吧
❾ 通过android代码如何实现手机蓝牙自动连接最后一次已配对的设备
先明确场景。你是希望如下哪种自动连接?
case1: 手机开机自动连接蓝牙最后配对设备:Android已经在Framework层实现。不需要Apk再做。关键代码如下:
.java 里面
onReceive 收到事件BluetoothAdapter.STATE_ON后
else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
initiateConnection();给状态机发CONNECT
.sendMessage(.CONNECT);
case2:蓝牙关闭状态,打开蓝牙,自动连接最后使用的设备:Apk层注册监听蓝牙打开的广播,然后在事件响应中获取已配对列表,取第一个去进行连接就好。
注册监听蓝牙打开的广播事件:android.bluetooth.adapter.action.STATE_CHANGED
Bluetooth ACTION_STATE_CHANGED curState = 11,preState = 10 打开中
Bluetooth ACTION_STATE_CHANGED curState = 12,preState = 11 打开了。
获取已配对设备列表:BluetoothAdapter.getBondedDevices()
取出第一个设备(也就是最新的),连接:
framework/base/core/java/android/bluetooth/
BluetoothHeadsetClient: connect(device)
BluetoothA2dpSink: connect(device)
❿ android蓝牙编程-如何实现自动连接上次连接过的蓝牙从机模块
每次只连接一个,传完数据后,连接下一个.要多连接的话,直接创建无线网络来连接.蓝牙能连接7个是因为只能保存蓝牙只能保存匹配数是7个