对象内部或服务内部的广播接收器?
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);
有了这个,当适配器正在扫描时被触发。
我有一个使用蓝牙的 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);
有了这个,当适配器正在扫描时被触发。