蓝牙功能
根据sdk中的docs的文档说明,使用Android的蓝牙设备时,只需要申请两个权限即可保证蓝牙的正常的工作(其实在与蓝牙相关的权限一共有3个,其中BLUETOOTH_PRIVILEGED权限只有系统应用可以使用,在这里就不说明了),今天我们需要使用的两个权限是:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
按照文档上的说明只要申请了这两个权限我们就可以使用蓝牙的相关功能了,包括开启设备,查询周边设备、设置可见的时间等!!
但是。。。
Google在android6.0之后,为了更好的保护用户的数据安全,所有需要访问硬件唯一标识符的地方都需要申请位置权限,也就是需要申请
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
申请其中的一个即可,不过我个人习惯全部申请,反正都是在同一个权限组里的,感觉无所谓呀!!
蓝牙的权限是normal级权限,只需要在Manifest里面申请即可,但是位置权限是dangerous级权限,除了需要在Manifest里申请之外,还需要在代码中进行动态申请,并跟踪用户对权限的确认结果!!(没有授权,你肯定是不能使用完整的功能的,不过好像不影响我们打开蓝牙,蓝牙的设备搜索功能是没有办法使用的)
OK!现在来看看如何动态申请权限:
@TargetApi(build.VERSION_CODES.M)
private void checkBluetoothAndLocationPermission(){
//判断是否有访问位置的权限,没有权限,直接申请位置权限 if((checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
|| (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)){
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION},LOCATION_PERMISSION_CODE);
}
}
在授权结果回调函数中判断用户的授权结果:
@Override
public void onRequestPermissionsResult(int requestcode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean grantedLocation = true;
if(requestCode == LOCATION_PERMISSION_CODE){
for(int i : grantResults){
if(i != PackageManager.PERMISSION_GRANTED){
grantedLocation = false;
}
}
}
if(!grantedLocation){
toast.maketext(this,"Permission ERROR !!!",Toast.LENGTH_SHORT).show();
finish();
}
}
大致的流程就是这个样子,做好了权限申请的工作,我们接下来才可以进行进一步的蓝牙开发!!
好了,关于蓝牙功能相关的权限就介绍到这里,有兴趣的朋友可以关注我一下,有什么问题大家可以相互探讨!!
文章最后发布于: 2017-10-22 12:14:11
相关阅读
本文转载自:http://blog.csdn.net/honghailiang888/article/details/51121257 目录:
1.activity_main.xml文件中 <!-- 保存数据到手机内存中 --> <Button android:id="@+id/btnSave" android:la
一篇文章看明白 Android 图形系统 Surface 与 Surface
Android - SurfaceFlinger 图形系统 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android B
【Android】Phoenix OS(凤凰系统)启用root权限
最新版(2.5.9.64)的Phoenix OS将开发者选项中的root权限开关去掉了,本篇教程的来源是XDA论坛的[Root] How to root Phoenix OS wit
背景:linux的安全很大程度上依赖于权限的分配,而目前线上机器sudo权限的分配统一以ALL的形式分配,很容易因为误操作而造成一些不可恢