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

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

android 判断是否打开了蓝牙网络共享_第1张图片

//调用
 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()
    }
}

你可能感兴趣的:(android)