如何在Lollipop及之后版本中使蓝牙始终保持可见?

50次阅读
没有评论

*

问题描述

使用手机作为蓝牙信标时遇到的问题:因Lollipop系统的限制,原有的自动保持蓝牙可见状态的方法不再有效。需要探究是否能够通过某种方式强制蓝牙持续处于可见状态,以确保能够在任何时候被其他硬件设备发现并触发相应动作。

解决方案

方案1:寻找第三方应用

虽然直接在系统层面解决这一问题更加理想化,但在现有情况下,可以探索是否存在预先存在的工具或应用程序来实现上述目的。从评论中提到的两个应用来看:
1. 蓝牙自动连接:该应用(https://play.google.com/store/apps/details?id=org.myklos.btautoconnect)允许设置蓝牙开机即发现模式但没有具体对“保持可见状态”进行直接支持。
2. T-Company 蓝牙扫描工具:同样有提到另一个应用 https://play.google.com/store/apps/details?id=com.tcompany.bluetoothdiscovery&hl=en,它能够监控蓝牙设备,并非专门用于使手机始终保持可见。此外未提及该应用是否包含所需的配置选项。

经过上述尝试后,若仍未能找到现成解决方案,则不得不自行开发应用程序来满足需求。

方案2:编写自定义应用

根据用户反馈,手动设置或第三方工具无法达到期待效果,因此选择编写一个能自动化蓝牙状态设置的应用程序。可以基于以下步骤构建基本框架:
1. 权限申请:确保在AndroidManifest.xml文件中包含必要权限如BLUETOOTH, BLUETOOTH_ADMIN等。
2. 自动启动:利用BroadcastReceiver监听系统开机事件,进而手动设定蓝牙配置(打开蓝牙并设置可见性)。
3. 蓝牙状态维护:通过Service或其他方式持续检查当前蓝牙状态并在必要时进行调整。

具体实现步骤如下:

// 在AndroidManifest.xml中添加相关权限声明
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

public class BluetoothService extends Service {
    // 实现必要的蓝牙操作,如开启蓝牙和设置可见性
    private void enableBluetooth() {
        final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (!bluetoothAdapter.isEnabled()) {
            bluetoothAdapter.enable();
        }

        // 设置可见
        Intent discoverableModeIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
        discoverableModeIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);  // 设定蓝牙可见时间为5分钟
        this.startActivity(discoverableModeIntent);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        // 注册广播接收器以监听系统开机事件
        registerReceiver(mBluetoothReceiver, new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
    }

    private final BroadcastReceiver mBluetoothReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
                enableBluetooth();
            }
        }
    };
}

确保在应用启动时开启蓝牙并保持其处于可见模式。这需要适配具体需求以及进行安全性和性能方面的考量。

通过上述方案,最终目的在于通过编程方式实现自动且持续的蓝牙状态调整功能,从而克服Lollipop系统对蓝牙应用限制带来的挑战。这种方法虽然相对间接,但能够更好地应对不断变化的技术环境和用户需求。

正文完