蓝牙权限android_android蓝牙权限 - CSDN
精华内容
参与话题
  • Android 8.0 蓝牙权限踩的坑

    千次阅读 2018-04-09 12:04:18
    Android 7.0及以下要使用蓝牙获取蓝牙名字,rssi,major,minor,需要动态获取得到 “通过网络或者卫星对您的手机定位”这个位置权限,而Android8.0需要打开位置信息才可以得到蓝牙major,minor等信息...
    Android 7.0及以下要使用蓝牙获取蓝牙名字,rssi,major,minor,需要动态获取得到 “通过网络或者卫星对您的手机定位”这个位置权限,而Android8.0需要打开位置信息才可以得到蓝牙major,minor等信息
    展开全文
  • 蓝牙有关权限的说明,以及在6.0之后的版本中,在蓝牙使用方面存在哪些变动,如何解决因为权限问题导致无法搜索周边设备的情况!

    根据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();
            }
        }

    大致的流程就是这个样子,做好了权限申请的工作,我们接下来才可以进行进一步的蓝牙开发!!

    好了,关于蓝牙功能相关的权限就介绍到这里,有兴趣的朋友可以关注我一下,有什么问题大家可以相互探讨!!

    展开全文
  • Android6.0蓝牙权限申请及开启蓝牙

    千次阅读 2017-05-16 15:46:32
    Android6.0蓝牙开发,运行时权限申请,开启蓝牙

    1、需要申请如下权限

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
    
    
    <uses-feature
        android:name="android.hardware.bluetooth_le"
        android:required="true" />



    2、申请运行时权限

       /**
         * 检查蓝牙权限
         */
        public void checkBlePermission() {
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_COARSE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {
    
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                        1);
            } else {
                Log.i("tag","已申请权限");
            }
        }
    2.1、重写onRequestPermissionsResult,判断用户是否同意

        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            switch (requestCode) {
                case 1: {
                    // 如果请求被取消,则结果数组为空。
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        Log.i("tag","同意申请");
                    } else {
                        Log.i("tag","拒绝申请");
                    }
                    return;
                }
            }
        }

    3、判断蓝牙是否打开,如果没有打开则打开蓝牙

       /**
         * 判断是否支持蓝牙,并打开蓝牙
         * 获取到BluetoothAdapter之后,还需要判断是否支持蓝牙,以及蓝牙是否打开。
         * 如果没打开,需要让用户打开蓝牙:
         */
        private void checkBleDevice() {
            //首先获取BluetoothManager
            BluetoothManager bluetoothManager =
                    (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
            //获取BluetoothAdapter
            if (bluetoothManager != null) {
                BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();
                if (mBluetoothAdapter != null) {
                    if (!mBluetoothAdapter.isEnabled()) {
                        //调用enable()方法直接打开蓝牙
                        if (!mBluetoothAdapter.enable()){
                            Log.i("tag","蓝牙打开失败");
                        }
                        else{
                            Log.i("tag","蓝牙已打开");
                        }
                        //该方法也可以打开蓝牙,但是会有一个很丑的弹窗,可以自行尝试一下
    //                    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    //                    enableBtIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    //                    startActivity(enableBtIntent);
                    }
                } else {
                    Log.i("tag","同意申请");
                }
            }
        }

    以上三步基本上就能完成Android6.0之后蓝牙的打开了,需要注意一点的是需要API 18以上,如下

    minSdkVersion 18
    否则在获取adapter的时候会报错!!!!

    如果需要兼容到API 18一下,又不会报错,应该怎么做呢,如果哪位大神看到了,留言指导一下,感谢!

    展开全文
  • Android6.0-蓝牙权限问题

    万次阅读 2016-05-06 21:08:25
    Android 6.0,原来的蓝牙功能,发现扫描蓝牙设备时,无法获取到蓝牙设备;因为在6.0后,蓝牙这块增加一个动态权限;需要在程序中动态申请。 1) 在6.0版本前,使用蓝牙功能,只需要配置下面的权限即可: ...

         在Android 6.0,原来的蓝牙功能,发现扫描蓝牙设备时,无法获取到蓝牙设备;因为在6.0后,蓝牙这块增加一个动态权限;需要在程序中动态申请。

    1)        在6.0版本前,使用蓝牙功能,只需要配置下面的权限即可:

    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

     

    2)        6.0及后续版本,使用蓝牙扫描,来需要添加如下的权限,且该权限还需要在使用时动态申请:

    <!-- Android6.0 蓝牙扫描才需要-->
    <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/>


    3)        动态申请权限

    //判断是否有权限
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    //请求权限
          ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
                MY_PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);
    //判断是否需要 向用户解释,为什么要申请该权限
        if(ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.READ_CONTACTS)) {
            Toast.makeText(this, "shouldShowRequestPermissionRationale", Toast.LENGTH_SHORT).show();
        }
    }

     

    //权限申请结果

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[]
          grantResults) {
      super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
     
    展开全文
  • Android 6.0蓝牙权限问题

    千次阅读 2018-06-29 14:56:32
    1、分析问题:在android 6.0(targetSdkVersion小于23)之前,安装新的app时系统会提示应用将要获取某某权限,如果同意安装,系统会默认为应用授予所申请的所有权限,而不同意的话,就不能安装应用;所以如果你以前...
  • 1、AndroidMainifest.xml权限: <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission and.....
  • Android6.0的蓝牙权限问题

    千次阅读 2017-04-26 11:27:11
    #Android6.0的蓝牙权限问题 在Adroid6.0以前,申请权限只需在manifest文件下申请相应的权限即可,但是Android6.0后,像一些危险权限,比如操作SD卡的写入,相机,录音等,是需要在java代码中去申请的。 本篇文章...
  • android动态权限申请及蓝牙扫描问题

    千次阅读 2018-05-28 20:38:01
    1)android 平台:1.1 android 动态权限申请处理方案: android6.0 及以上系统,危险权限(音频权限,定位权限,电话权限): 说明:以下信息是方案制定的依据。上述方案是针对普遍现象处理。 普遍现象:在首次安装...
  • android 蓝牙 6.0权限

    千次阅读 2017-04-21 14:10:19
    android 6.0(targetSdkVersion小于23)之前,安装新的app时系统会提示应用将要获取某某权限,如果同意安装,系统会默认为应用授予所申请的所有权限,而不同意的话,就不能安装应用;所以如果你以前的APP设置的...
  • 问题: Android 6.0以上动态申请权限的问题(以蓝牙为例) 解决思路: Google出于保护用户数据...蓝牙权限 蓝牙的权限是Normal级 位置权限是Dangerous级权限 虽然这两者权限都需要在Manifest配置文件中申请,但是位...
  • 蓝牙权限(本文的讲解内容之一) 蓝牙功能开启(本文的讲解内容之一) 搜索蓝牙设备(本文的讲解内容之一) 与外设搭建RFCOMM通道(射频通道) 蓝牙设备双向数据传输 蓝牙聊天室案例框架 蓝牙权限 执行蓝牙...
  • 本文介绍如何在安卓工程中增加蓝牙权限和feature
  • android 蓝牙权限问题

    千次阅读 2018-11-20 09:49:41
    Caused by: java.lang.SecurityException: Permission Denial: starting Intent { act=android.bluetooth.adapter.action.REQUEST_DISCOVERABLE flg=0x10000000 cmp=...
  • Android蓝牙开发—经典蓝牙详细开发流程

    万次阅读 多人点赞 2018-07-25 15:43:09
    Android蓝牙开发前,首先要区分是经典蓝牙开发还是BLE(低功耗)蓝牙开发,它们的开发是有区别的,如果还分不清经典蓝牙和BLE(低功耗)蓝牙的小伙伴,可以先看Android蓝牙开发—经典蓝牙和BLE(低功耗)蓝牙的区别 ...
  • Android 监测蓝牙程序是否开启

    千次阅读 2018-08-31 11:02:48
    android监测蓝牙程序是否开启,若要开启记得在xml中添加蓝牙权限 private void checkBluetoothValid() { final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); if(adapter == null) { ...
  • Android 蓝牙开启关闭

    2020-04-21 11:28:45
    允许蓝牙权限 在AndroidManifest.xml中加入: //所有手机需要的权限,蓝牙功能才能正常使用 <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name=...
  • 它的蓝牙权限,只提示了用户需要开启蓝牙,然后我只点了确定,没有授权步骤 就打开了(其实是有授权步骤的,小米运动悄悄做了),我想知道这是怎么做到的, 我禁止权限后他还是能悄悄授权然后打开蓝牙。先谢过
  • Android蓝牙开发系列目录: https://blog.csdn.net/huangliniqng/article/details/82185635 一、判断是否系统是否支持蓝牙 在使用蓝牙之前,我们首先要判断手机设备是否支持蓝牙,虽然现在基本都支持蓝牙了,但是...
  • Android 蓝牙开发基本流程

    万次阅读 多人点赞 2019-08-23 12:26:52
    对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android蓝牙开发,国内的例子很少 Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发...
1 2 3 4 5 ... 20
收藏数 14,716
精华内容 5,886
关键字:

蓝牙权限android