我们有一个应用程序可以扫描蓝牙设备。负责扫描的代码应仅在启用蓝牙时运行。此外,我们希望在任何时间点禁用/启用此功能。
我们选择实现为BluetoothAdapter注册的BroadcastRecector。ACTION_STATE_CHANGED广播。
以下是我们遇到的一些问题:
以编程方式启用BroadcastRecector:
public void registerForBroadcasts(Context context) {
IntentFilter bluetooth = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
context.registerReceiver(this, bluetooth);
}
在清单中声明BroadcastRecector
<receiver android:name="com.mypackage.BroadcastReceiver">
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
</intent-filter>
</receiver>
将清单中的BroadcastReceiver声明为已禁用,并以编程方式启用它
<receiver android:name="com.mypackage.BroadcastReceiver"
android:enabled="false" >
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
</intent-filter>
</receiver>
然后在需要时启用该组件。
public void registerForBroadcasts(Context context) {
ComponentName component = new ComponentName(context, BroadcastReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(
component,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
我的测试显示,该状态与系统保持一致,因此BroadcastRecector将保持启用状态。它结合了两种方法的优点。
我是否遗漏了什么,这个方法合法吗?
不能禁用BroadcastRecector。
当然可以。请使用PackageManager
和setComponentEnabled设置()
,就像您在第三个场景中所做的那样。
我是否遗漏了什么,这个方法合法吗?
这是非常合法的,至少在管理广播接收器方面是如此。我不知道是否有任何蓝牙特定的问题,尽管我会怀疑它。此技术用于各种广播,例如,当您确实需要在启动时执行某些操作时,仅收听
操作\u BOOT\u COMPLETED
。
可以通过编程方式启用/禁用接收器。
以编程方式启用
PackageManager pm = Re_editActivity.this.getPackageManager();
ComponentName componentName = new ComponentName(currentActivity.this, name_of_your_receiver.class);
pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
以程序方式禁用
PackageManager pm = Re_editActivity.this.getPackageManager();
ComponentName componentName = new ComponentName(currentActivity.this, name_of_your_receiver.class);
pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
舱单接收人
<receiver android:name="name_of_your_receiver" android:enabled="false">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
是否有一种编程(基于属性)的方法在Spring引导(1.2.2)中禁用RabbitAutoConfiguration。 看起来像Spring。rabbitmq。dynamic=false仅禁用AmqpAdmin,而不禁用连接工厂等。 我们想要一个模型,其中应用程序属性可以来自Spring Cloud config(包括控制总线)或通过-D jvm args。这个决定是在部署时做出的。当属性来自-D
问题内容: 我需要从Windows XP中的脚本启用/禁用完全网络接口。我正在寻找python解决方案,但是任何通用的方式(例如WMI,某些命令行ànetsh,某些Windows调用)都是受欢迎的,并且会进行调整。谢谢。 问题答案: 使用netsh接口用法设置接口[name =] IfName [[admin =] ENABLED | DISABLED [connect =] CONNECTED
本文向大家介绍如何以编程方式在iOS中启用/禁用数据连接?,包括了如何以编程方式在iOS中启用/禁用数据连接?的使用技巧和注意事项,需要的朋友参考一下 用户可以通过iOS设备的设置打开或关闭移动数据,但是实际上不可能以编程方式禁用或启用相同功能。仅当您越狱iOS设备时才有可能。Apple不允许任何应用程序开发人员访问wifi或蓝牙。 有一些私有API可能会帮助您解决此问题,但最终会导致应用商店拒绝
我正在开发一个应用程序,用户可以通过点击按钮启用/禁用移动网络。我在谷歌上搜索过这个问题,但我只得到了飞机模式的解决方案。在飞行模式下,WI-FI和蓝牙也被禁用。我不希望他们使用飞机模式的概念来禁用。我只想禁用移动网络。按语法实现它的可能方式是什么?
问题内容: 我需要重新启动我的应用程序,以防万一我重新加载需要从一开始就开始的内容。我试过了 但我收到一个错误 启动路径不可访问 问题答案: 尽管问题本身是微不足道的(忘记了路径),但在其他人需要相同功能的情况下,我还是留下了疑问。 编辑 (Sw3的每日Swift语法更改; Sw4也适用):
问题内容: 如何以编程方式为特定类启用断言,而不是指定命令行参数“ -ea”? 问题答案: 这是对@bala好的答案的评论,但时间太长。 如果仅启用断言,则调用您的主类-您的主类将在启用断言之前加载,因此您可能需要一个不直接引用代码中其他内容的加载器。它可以设置断言,然后通过反射加载其余代码。 如果在加载类时未启用断言,则应立即将其“编译出”,这样您就无法打开和关闭它们。如果要切换它们,则根本不需