当前位置: 首页 > 知识库问答 >
问题:

在配对或连接蓝牙扫描仪(Inateck)和移动设备时,活动会被破坏

阎阳
2023-03-14

我正在设置一个蓝牙扫描仪Android应用程序,在那里我尝试使用Android代码连接蓝牙扫描仪(Inetck)和移动设备。

我的要求:通过我的应用程序将两个设备配对。连接设备。蓝牙扫描仪将扫描条形码中的代码,我需要将其显示在我的应用程序编辑文本中。

首先,我将使用Android Bluetooth API发现蓝牙设备。

public final BroadcastReceiver AvailableBlueToothDevicesBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {


        final String action = intent.getAction();
        Log.d(TAG, "onReceive: ACTION FOUND.");

        if (action.equals(BluetoothDevice.ACTION_FOUND)) {

            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            if (availableDevice == null) {
                availableDevice = new MutableLiveData<BluetoothDevice>();
            }
            availableDevice.setValue(device);

        } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {

            //Done searching
            if (availableDevice == null) {
                availableDevice = new MutableLiveData<BluetoothDevice>();
            }
            availableDevice.setValue(null);
        }
    }
};

这是用于获取可用设备的广播接收器。

我会登记这个的

IntentFilter discoverDevicesIntent = new IntentFilter(BluetoothDevice.ACTION_FOUND);
                        getContext().registerReceiver(broadcastManager.AvailableBlueToothDevicesBroadcastReceiver, discoverDevicesIntent);  



有了这个,我将得到附近蓝牙设备的列表。我会在回收视图中列出。在点击这些设备时,必须在设备之间进行配对。为此,我使用了以下代码。

private void pairDevice(BluetoothDevice bluetoothDevice){

 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) {                 
                       Log.d(TAG, "Trying to pair with " + 
                       bluetoothDevicebluetoothDevice.getName());
                       bluetoothDevice.createBond();
            }

}

执行此代码后,会出现一个对话框,要求与设备配对。配对完成后,会调用我的活动的onDestroy()生命周期事件,并默认重新创建我的活动。这会丢失我活动中以前的数据。这不应该发生。但配对是成功的。

当我尝试连接我的Android手机和蓝牙扫描设备时,就会发生这种情况。但是,如果我尝试在两部android手机之间配对,则不会发生调用onDestroy()事件。谁能告诉我为什么会这样?

共有1个答案

秦钟展
2023-03-14

某些设备配置在运行时可能会发生变化(例如屏幕方向、键盘可用性以及用户启用多窗口模式时)。当发生这样的变化时,Android会重新启动正在运行的活动(调用onDestroy(),然后调用onCreate()。重启行为旨在通过使用与新设备配置匹配的替代资源自动重新加载应用程序来帮助应用程序适应新配置。

在我的例子中,我试图连接到一个蓝牙扫描仪,它将作为一个物理键盘。因此,我们需要在AndroidManifest中的活动中添加configChanges。xml

Android:配置更改="方向|屏幕大小|键盘|键盘隐藏|导航"

但方向和屏幕大小不一定要在配置中更改。但其他人是。

更多信息请参考:https://developer.android.com/guide/topics/resources/runtime-changes

 类似资料:
  • 我正在创建一个蓝牙扫描仪应用程序,并试图找到可用的设备配对。我有一个蓝牙耳机,我正试图找到运行android 10应用程序。 权限在清单中设置 应用程序包含一个简单的按钮,点击它我开始发现蓝牙设备 用于发现的回调 如果我错过了什么,有人能帮我吗?

  • 开启蓝牙扫描 参数说明 字段 类型 必须? 说明 blePrefix String 是 设备名称类型前缀 示例代码 Swift: RokidMobileSDK.binder.startBLEScan(blePrefix: String) ->Bool Objc: [RokidMobileSDK.binder startBLEScanWithBlePrefix:@"Rokid-"]; 手机蓝牙未打

  • 扫描设备 介绍 需要传入扫描蓝牙设备的名称的前缀,回调均在主线程。如果传空,是无法获取设备列表。 1、单前缀蓝牙设备 参数说明 字段 类型 必须? 说明 type String 是 设备名称类型前缀 举个大栗子 String type = "Rokid-" RokidMobileSDK.binder.startBTScan(type, new IBTScanCallBack() { @Ov

  • 我在连接时遇到问题。起初它有效,而不是不起作用,除非我取消配对设备。我已经得到了所有可能发生的异常,套接字关闭,管道关闭,连接被拒绝,端口已经在使用中,等等。 我知道android 4.2之前版本的蓝牙存在问题(https://code.google.com/p/android/issues/detail?id=37725). 我在连接这些设备时遇到问题的设备: Htc one(Android4.

  • 我正在尝试使用基于处理的android应用程序扫描蓝牙设备。我想使用处理通过蓝牙与我的微控制器板通信,如下例所示: http://webdelcire.com/wordpress/archives/1045 我成功地在我的android平板电脑上启动了这个应用程序。但是,我无法在平板电脑上列出蓝牙设备。我的平板电脑识别的唯一蓝牙设备是我电脑上的蓝牙适配器。为什么我不能列出所有蓝牙设备?我的电脑能够

  • 连接设备 接口说明 用于连接 扫描出来的蓝牙设备。 参数说明 字段 类型 必须? 说明 device RKBLEDevice 是 蓝牙设备 示例代码 Swift: RokidMobileSDK.binder.connect(device: RKBLEDevice) Objc: [RokidMobileSDK.binder connect:device]; 断开设备 接口说明 用于断开已经连接的