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()
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android判断蓝牙是否已经开启,你可以使用BluetoothAdapter类来实现。以下是一个示例: ```java import android.bluetooth.BluetoothAdapter; import android.content.Intent; import android.os.Bundle; public class MainActivity extends AppCompatActivity { private BluetoothAdapter bluetoothAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter == null) { // 设备不支持蓝牙 // 在这里处理蓝牙不可用的情况 } else { // 检查蓝牙是否已经开启 if (!bluetoothAdapter.isEnabled()) { // 蓝牙未开启,可以请求用户打开蓝牙 Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } else { // 蓝牙已经开启 // 在这里处理蓝牙已开启的情况 } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_ENABLE_BT) { if (resultCode == RESULT_OK) { // 用户已经打开蓝牙 // 在这里处理用户已打开蓝牙的情况 } else { // 用户未打开蓝牙 // 在这里处理用户未打开蓝牙的情况 } } } } ``` 在上述示例中,我们首先获取蓝牙适配器对象。然后,检查蓝牙适配器是否为null,如果为null表示设备不支持蓝牙。接下来,我们检查蓝牙是否已经开启,如果未开启,可以通过ACTION_REQUEST_ENABLE来请求用户打开蓝牙。在onActivityResult方法中,可以处理用户的响应结果。 请注意,你需要在AndroidManifest.xml文件中声明蓝牙权限: ```xml <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> ``` 这样就可以判断蓝牙是否已经开启了。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值