• android 判断是否打开了蓝牙网络共享


    最近做项目遇到需要判断手机是否打开了蓝牙网络共享的开关

    在这里插入图片描述

    //调用
     isBluetoothPanTetheringOn(context) {
        if (it) {
            Log.i("TAG","已打开")
        } else {
            Log.i("TAG","未打开")
            context.gotoBleShareSettings()
        }
    }
    
    
    
    /**
     * 是否打开蓝牙网络共享
     *
     */
    fun isBluetoothPanTetheringOn(context: Context, callBack: (Boolean) -> Unit) {
            try {
                val bluetoothManager: BluetoothManager = context.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
                val bluetoothAdapter = bluetoothManager.adapter
                if (bluetoothAdapter == null || bluetoothAdapter.isEnabled) {
                    callBack.invoke(false)
                }
    
                val panProfileClass = Class.forName("android.bluetooth.BluetoothPan")
                val isTetheringOn: Method = panProfileClass.getDeclaredMethod("isTetheringOn")
                val profileListener = object : BluetoothProfile.ServiceListener {
                    override fun onServiceConnected(profile: Int, proxy: BluetoothProfile?) {
                        try {
                            if (profile == 5) {
                                val tetheringOn: Boolean = isTetheringOn.invoke(proxy) as Boolean
                                if (tetheringOn) {
                                    callBack.invoke(true)
                                } else {
                                    callBack.invoke(false)
                                }
                            }
                        } catch (e: Exception) {
                            e.printStackTrace()
                        }
                    }
    
                    override fun onServiceDisconnected(profile: Int) {
                        callBack.invoke(false)
                    }
                }
    
                bluetoothAdapter.getProfileProxy(context, profileListener, 5)
            } catch (e: Exception) {
                callBack.invoke(false)
            }
        }
    
    
    
    /**
     * 跳转到蓝牙网络共享设置界面
     */
    fun Context.gotoBleShareSettings(){
        val intent = Intent()
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
            intent.action = Settings.ACTION_WIRELESS_SETTINGS
        } else {
            intent.component = ComponentName(
                "com.android.settings",
                "com.android.settings.Settings\$TetherSettingsActivity"
            )
        }
        try {
            intent.flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            startActivity(intent)
        } catch (e: ActivityNotFoundException) {
            e.printStackTrace()
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
  • 相关阅读:
    等保到底在“保”什么?
    用 Three.js 创建一个酷炫且真实的地球
    阿里云云数据库Redis的基本使用(十五)
    机器学习平台整理
    HIVE内置函数map_keys -- 源码解析
    C/C++ 简单排序之冒泡排序
    执行ls /dev/pts为什么这么慢?
    spring security 认证授权详解
    AtCoder Regular Contest 146 C Even XOR题解
    实体-联系模型--E-R图
  • 原文地址:https://blog.csdn.net/u012121105/article/details/133815541