美文网首页
Android拨打电话和蓝牙状态监听

Android拨打电话和蓝牙状态监听

作者: 静水红阳 | 来源:发表于2020-10-29 14:20 被阅读0次

    一、拨打电话

    权限管理

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

    思路

    通过Intent设置Action为ACTION_DIAL或者 ACTION_CALL,通过intent启动直接拨打电话或者打开拨打电话界面。

    示例代码

    直接拨打电话
    
    /**
     * 拨打电话(直接拨打电话)
     * @param phoneNum 电话号码
     */
    public void callPhone(String phoneNum){
        Intent intent = new Intent(Intent.ACTION_CALL);
        Uri data = Uri.parse("tel:" + phoneNum);
        intent.setData(data);
        startActivity(intent);
    }
    
    跳转到拨打电话界面
    
    /**
     * 拨打电话(跳转到拨号界面,用户手动点击拨打)
     *
     * @param phoneNum 电话号码
     */
    public void callPhone(String phoneNum) {
        Intent intent = new Intent(Intent.ACTION_DIAL);
        Uri data = Uri.parse("tel:" + phoneNum);
        intent.setData(data);
        startActivity(intent);
    }
    

    二、蓝牙状态监听

    概述

    在项目需求中碰到了需要Android设备和蓝牙进行数据交互和操作,需要实时监听蓝牙状态的变化,包括有蓝牙的打开、关闭、连接、断开连接。
    考虑到是采用监听的方式,可以设置一个系统全局广播进行监听。

    本地广播无法实现蓝牙状态监听

    下面是对Android设备中对蓝牙进行状态监听的步骤及代码:

    权限

    配置文件中添加蓝牙权限:

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

    设置广播类

    示例代码如下:

    class BluetoothMonitorReceiver : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            var action: String? = intent?.action ?: return
            when(action){
                BluetoothAdapter.ACTION_STATE_CHANGED ->{
                    var blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,0)
                    when(blueState){
                        BluetoothAdapter.STATE_TURNING_ON ->{
                            Log.d("TAG","蓝牙设备正在打开")
                        }
                        BluetoothAdapter.STATE_ON ->{
                            Log.d("TAG","蓝牙设备已打开")
                        }
                        BluetoothAdapter.STATE_TURNING_OFF ->{
                            Log.d("TAG","蓝牙设备正在关闭")
                        }
                        BluetoothAdapter.STATE_OFF ->{
                            Log.d("TAG","蓝牙设备已关闭")
                        }
                    }
                }
                BluetoothDevice.ACTION_ACL_CONNECTED -> {
                    Log.d("TAG","蓝牙设备已连接")
                }
                BluetoothDevice.ACTION_ACL_DISCONNECTED -> {
                    Log.d("TAG", "蓝牙设备已断开")
                }
            }
        }
    }
    

    Activity中注册代码

    class MainActivity : AppCompatActivity() {
        private var bluetoothMonitorReceiver:BluetoothMonitorReceiver? =null
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            registerBluetoothReceiver()
        }
        
        /**
         * 注册蓝牙广播
         */
        private fun registerBluetoothReceiver() {
            if(bluetoothMonitorReceiver == null) {
                bluetoothMonitorReceiver = BluetoothMonitorReceiver()
            }
            var intentFilter = IntentFilter()
            //监听打开蓝牙状态
            intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED)
            //监听蓝牙连接状态
            intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED)
            intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED)
            registerReceiver(bluetoothMonitorReceiver, intentFilter)
        }
        
        override fun onDestroy() {
            unregisterReceiver(bluetoothMonitorReceiver)
            super.onDestroy()
        }
    

    打开和关闭蓝牙

    打开蓝牙

        /**
         * 打开蓝牙
         */
        private fun openBluetooth(){
            //申请打开蓝牙弹窗
    //        var intent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
    //        startActivity(intent)
    
            // 隐式打开蓝牙
            var bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
            bluetoothAdapter.enable()
        }
    

    关闭蓝牙

    /**
         * 关闭蓝牙
         */
        private fun closeBluetooth(){
            //打开设置中有关蓝牙的页面,不建议使用
    //        var intent = Intent(Settings.ACTION_BLUETOOTH_SETTINGS)
    //        startActivity(intent)
    
            // 隐式关闭蓝牙
            var bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
            bluetoothAdapter.disable()
        }
    

    相关文章

      网友评论

          本文标题:Android拨打电话和蓝牙状态监听

          本文链接:https://www.haomeiwen.com/subject/kvbkvktx.html