专业的编程技术博客社区

网站首页 > 博客文章 正文

AndroidStudio_安卓原生开发_蓝牙连接设备需要动态申请位置权限

baijin 2024-10-02 11:11:32 博客文章 6 ℃ 0 评论

android 6.0 以后,搜索蓝牙设备,打开蓝牙,除了需要蓝牙权限以外,


<!--蓝牙权限-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />   在android的6.0之前,需要在maniffests文件中 AndroidManifest.xml 添加上面的蓝牙权限就可以了


?


可以看到,但是在android 6.0 以后还需要下面的这两个权限.其实就是位置权限.


<!--6.0及之后需要动态申请-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />



而且这个位置权限需要动态的去申请,下面就是动态申请android的位置权限的代码


?


比如我这里,在activity的onCreate方法中调用了,获取这个位置权限的方法.


1.下面是getPermission的方法.


  /**
     * 解决:无法发现蓝牙设备的问题
     *
     * 对于发现新设备这个功能, 还需另外两个权限(Android M 以上版本需要显式获取授权,附授权代码):
     */
    private final int ACCESS_LOCATION=1;
    @SuppressLint("WrongConstant")
    private void getPermission() {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
            int permissionCheck = 0;
            permissionCheck = this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
            permissionCheck += this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION);

            if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
                //未获得权限
                this.requestPermissions( // 请求授权
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
                                Manifest.permission.ACCESS_COARSE_LOCATION},
                        ACCESS_LOCATION);// 自定义常量,任意整型
            }
        }
    }



2.还有依赖的两个方法


   /**
     * 请求权限的结果回调。每次调用 requestpermissions(string[],int)时都会调用此方法。
     * @param requestCode 传入的请求代码
     * @param permissions 传入permissions的要求
     * @param grantResults 相应权限的授予结果:PERMISSION_GRANTED 或 PERMISSION_DENIED
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case ACCESS_LOCATION:
                if (hasAllPermissionGranted(grantResults)) {
                    Log.i("TAG", "onRequestPermissionsResult: 用户允许权限");
                } else {
                    Log.i("TAG", "onRequestPermissionsResult: 拒绝搜索设备权限");
                }
                break;
        }
    }

    private boolean hasAllPermissionGranted(int[] grantResults) {
        for (int grantResult : grantResults) {
            if (grantResult == PackageManager.PERMISSION_DENIED) {
                return false;
            }
        }
        return true;
    }



3.说明,将上面的代码,复制就可以使用了,就是程序启动的时候,调用一下,如果该程序没有获得位置权限的话,会自动弹出一个提示,是否允许,程序在使用期间,使用位置信息,点击允许,这个时候,再去,


搜索蓝牙设备就可以搜索到蓝牙了.





?

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表