gpt4 book ai didi

Android 阻止蓝牙配对对话框

转载 作者:可可西里 更新时间:2023-11-01 19:07:45 26 4
gpt4 key购买 nike

我正在开发一个使用蓝牙进行打印的内部应用程序。我希望在没有用户输入的情况下进行蓝牙配对。我设法通过捕获 android.bluetooth.device.action.PAIRING_REQUEST 广播来实现它。

在我的广播接收器中,我调用了 setPin 方法,配对工作正常,但 BluetoothPairingDialog 会显示一两秒钟,然后消失 - 请参见下面的链接。

https://github.com/android/platform_packages_apps_settings/blob/master/src/com/android/settings/bluetooth/BluetoothPairingDialog.java

由于广播是无序的,我无法调用 abortBroadcast(),想知道是否有任何其他方法可以防止配对对话框出现。我可以通过某种方式连接到窗口管理器吗?

最佳答案

老实说,如果不修改 sdk,我一直无法想出一种方法来做到这一点。如果您是 OEM,这很容易(我使用的是 4.3):

在 packages/apps/Settings/AndroidManifest.xml 中,注释配对对话框的 Intent 过滤器:

<activity android:name=".bluetooth.BluetoothPairingDialog"
android:label="@string/bluetooth_pairing_request"
android:excludeFromRecents="true"
android:theme="@*android:style/Theme.Holo.Dialog.Alert">
<!-- <intent-filter>
<action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter> -->
</activity>

在 frameworks/base/core/java/android/bluetooth/BluetoothDevice.java 中删除这个常量的@hide javadoc 注释

@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_PAIRING_REQUEST =
"android.bluetooth.device.action.PAIRING_REQUEST";

和这个方法

public boolean setPairingConfirmation(boolean confirm) 

然后为 BluetoothDevice.PAIRING_REQUEST 操作注册您自己的 Activity 或广播接收器。此广播接收器允许在没有用户输入的情况下继续配对(仅当不需要 pin 时):

@Override
public void onReceive(Context context, Intent intent) {
if( intent.getAction().equals(BluetoothDevice.ACTION_PAIRING_REQUEST) ) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
device.setPairingConfirmation( true );
}
}

您需要重建 SDK 并针对新版本编译您的代码以访问常量和方法,并替换/system 分区上的 Settings.apk 以禁用对话框。您可能还需要作为系统应用程序运行,但我认为可能不需要。

关于Android 阻止蓝牙配对对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17971834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com