【Android 应用开发】Android之Bluetooth编程
Android中通过静态注册的屏幕开启和屏幕关闭的BroadCastReceiver为什么捕捉不到广播?
android开发中使用AndroidManiFest.xml静态注册的BroadCastReceiver没有作用是什么原因?
使用静态注册,Debug运行,就是没进到onReceive()方法那里去。我用真机调试的。
但是使用动态注册,又可以捕捉到。我想问,这个系统广播可不可以静态注册?如果可以为什么会捕捉不到呢?
在Android 的广播机制中,动态注册的优先级是要高于静态注册优先级的,你是否在调试时2个都注册了,所以出现你的这种情况;当用来注册动态广播接收器的activity被关闭时,这个动态接收器也就是就失效了,静态注册的广播接收器只要有你注册的广播出现就能接收到广播。
对于这两个action:
android.intent.action.SCREEN_OFF android.intent.action.SCREEN_ON
在AndroidManifest.xml中注册是不可以的。
这有点不同于其他的action,你只有在Service中通过动态注册去监听这个事件。
这个问题我的理解是google故意这么做的,有两点考虑: 1.提高监听screen_on screen_off门槛 这两个事件是android的基本事件,如果呗大多数程序监听,会大大的拖慢整个系统,所以android也应该不鼓励我们在后台监听这两个事件。
2.有让我们在service后台监听 这也是提供了一个解决问题,强调和service共存亡,不会一直在后台无限情运行。
总之应该是为了保证系统的稳定和安全才采取这样的措施。 希望对你有帮助。
蓝牙配对密码设置
先是写个
<receiver android:name=".broadcast.PairingRequest">
<intent-filter>
<action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
<action android:name="android.bluetooth.device.action.PAIRING_CANCEL" />
</intent-filter>
</receiver>
然后是你的
public class PairingRequest extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
if (intent.getAction().equals("ACTION_PAIRING_REQUEST")) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
byte[] pinBytes = BluetoothDevice.convertPinToBytes("1234");
device.setPin(pinBytes);
}
}
}
其中的蓝牙BluetoothDevice这个类要用源码里的替换下
蓝牙设备是怎么连接的
最前提的条件是有蓝牙的MAC地址; String macAddress;
根据蓝牙的MAC地址 , 可以获得蓝牙设备BluetoothDevice对象 , BluetoothDevice device = bluetoothAdapter.getRemoteDevice(macAddress);
将蓝牙设备对象传入服务中的connect方法中;
将设备连接放在线程中完成 , 创建一个设备连接的线程 , 启动这个线程.
BluetoothAdapter资料 :
关于权限资料
android.permission.BLUETOOTH 允许程序连接到已配对的蓝牙设备(Allows applications to connect to paired bluetooth devices) android.permission.BLUETOOTH_ADMIN 允许程序发现和配对蓝牙设备(Allows applications to discover and pair bluetooth devices)
为了在应用程序中使用蓝牙功能,我们至少需要声明两方面的权限:BLUETOOTH和BLUETOOTH_ADMIN。
你必须请求BLUETOOTH权限才能够实现蓝牙通信,例如请求一个连接、接受一个连接和传输数据。
你必须请求BLUETOOTH_ADMIN权限,才能够初始化device discovery或者管理蓝牙设置(Bluetooth settings)。大多数应用程序必须具有这个权限才能够发现本地蓝牙设备,这个权限保护的其他能力(除了发现本地设备)不应该被使用,除非你的应用程序是在用户请求的时候能够修改蓝牙设置的管理者。
注意:如果你想要使用BLUETOOTH_ADMIN权限,那么你首先必须有BLUETOOTH权限。
你需要在应用程序的manifest文件中声明程序的蓝牙权限。例如:
[xhtml] view plain copy
<manifest ... >
<uses-permission android:name="android.permission.BLUETOOTH" />
...
</manifest>
关于声明应用程序权限的信息,请看<uses-permission>参考。
相关文章
- 如何实现Android平台GB28181设备对接Camera2数据
- strictmode android,Android 应用性能优化-StrictMode(严格模式)
- Android adb shell dumpsys activity broadcasts分析
- 观察者模式及在Android源码中的应用
- android-短信验证功能,Android实现获取短信验证码的功能以及自定义GUI短信验证详解…
- android ListView 例子
- [译] 将通用 Android 音乐播放器转化为 instant 应用
- Android resource linking failed_android sdk location should not
- Android中各种Exception错误小结
- R8在Android手Q中的应用
- android 底部标签栏CommonTabLayout搭建项目底部菜单(带消息提醒)
- 【Android 逆向】Android 进程简介 ( Android 应用启动流程 )
- 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )
- 【错误记录】Android 应用安装后出现两个启动图标 ( 排查应用及依赖库中配置了 android.intent.category.LAUNCHER 的 Activity )
- 【错误记录】Android Studio 编译时 lint 检查报错 ( WARNING: DSL element ‘android.dataBinding.enabled‘ is obsolet )
- 【错误记录】Android 应用 POST 网络请求报错 ( java.io.IOException: Cleartext HTTP traffic to xxx not permitted )
- 【Android Gradle 插件】Gradle 依赖管理 ⑩ ( dependencies 依赖配置项 configurations )
- 【错误记录】Android Studio 真机运行 Apk 应用报错 ( The application could not be installed: SHELL_UNRESPONSIVE )
- 【Android Gradle 插件】将自定义 Gradle 插件上传到自建 Maven 仓库 ③ ( 配置上传工件 | 将 Gradle 插件 jar 包、源码、文档上传到本地Maven 仓库 )
- 【Android Gradle 插件】Gradle 基础配置 ⑥ ( Android工程 Gradle 常用命令 | gradlew 可执行文件 | 查看帮助文档 | 查看应用依赖 )
- Android剪裁图片简单的方法详解手机开发
- 谷歌发Android福利:不装应用就能收听播客或订阅频道内容详解手机开发
- [android] 通过比对进行容器联动详解手机开发
- Android ViewDragHelper及移动处理总结详解手机开发
- Android中的脑残设计总结
- Android开发中怎样调用系统Email发送邮件(多种调用方式)