对象内部或服务内部的广播接收器?

Broadcast Receiver inside an object or inside a service?

我有一个使用蓝牙的 Android 应用程序。为了始终使用蓝牙,我已经实现了一个服务,即使应用程序在后台也能始终打开它。由于将有大量专门用于蓝牙的代码,因此我决定为所有与蓝牙相关的方法等创建一个 ListActivity。每次我启动服务时,都会创建一个新的蓝牙对象class。

现在,考虑到这个细节,我的问题是:如果我在这个对象中执行 adapter.Discovery,我该如何处理广播接收器?对于接收器,我有:

   private final BroadcastReceiver BEReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        int a = 1;
        a++;
};

我把这个放在服务和对象中做不同的测试。为了添加接收器,我有:

            IntentFilter BEFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
            mycontext.registerReceiver(BEReceiver, BEFilter);

我在服务的开头添加了这些行以在本地调用它,但它不起作用。然后,我在蓝牙对象中创建了 BEFilter,在这里我放置了蓝牙对象的 BEFilter。都没有用。我还在蓝牙对象的构造函数中添加了这些行以在本地执行它,但它都没有用。我应该怎么办?我需要在发现适配器时添加设备。

在清单中我有:

   <intent-filter>
                <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
            <action android:name="android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED" />
            <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
            <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
     </intent-filter>

对于蓝牙对象,服务和创建服务的主要activity。

我的问题是 BEReceiver 从未被调用,我在调试中没有错误。

在清单中我还有:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  <!-- BLE needs this! -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><!-- BLE needs this! -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

看来我要找的是:

IntentFilter filter2 = new IntentFilter();
filter2.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter2.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter2.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
registerReceiver(mBroadcastReceiver2, filter2);

有了这个,当适配器正在扫描时被触发。