我创建了一个名为ManageConnection的类,用于处理所有蓝牙连接。这个类实现了单例模式。
但是我遇到了以下问题,不知道如何从我的ManageConnection类中告诉一个活动(例如),设备已经成功连接。
ManageConnection类将会使用多种活动。
谢谢。
BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Do what you need in here
}
};
@Override
protected void onResume() {
super.onResume();
registerReceiver(mReceiver, new IntentFilter(ManageConection.BROADCAST_FILTER));
}
@Override
protected void onDestroy() {
unregisterReceiver(mReceiver);
super.onDestroy();
}
来自您的ManageConnection
类:
public static final String BROADCAST_FILTER = "ManageConection_broadcast_receiver_intent_filter";
现在,每当您想发送消息时,您可以发送 Intent
,并且每个具有相同筛选器(BROADCAST_FILTER
)的活动都会得到回调:
Intent i = new Intent(BROADCAST_FILTER);
i.putExtra("connection_established", true);
sendBroadcast(i);
2. 使用 interface
:
在应用程序的某个地方创建一个接口。从每个活动中创建一个实例,并将其传递给 ManageConection
:
public interface ManageConection {
public void onConnected();
}
private ManageConection mCallback = new ManageConection() {
@Override
public void onConnected() {
// callback goes here
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ManageConection.getInstace().setConnectionCallback(mCallback);
}
ManageConection
中设置一个全局变量作为回调函数并在setConnectionCallback()
中设置它:private ManageConection mCallback;
public void setConnectionCallback(ManageConection callback) {
mCallback = callback;
}
if(mCallback != null)
mCallback.onConnected();
我知道还有其他方法,但这些是最通用的方法。
更新
此外,为了组件之间的松耦合,你可以查看面向事件编程的Android。
祝你好运!
定义一个接口,并使用回调函数来告知活动(activity)设备已连接或数据已接收。
public interface BluetoothDeviceListener {
void onDeviceConnected(int arg1, string arg2); ..<----add arguments you want to pass back
void onDataReceived(int arg1, string arg2); ..<----add arguments you want to pass back
}
ArrayList<BluetoothDeviceListener> listeners = new ArrayList<BluetoothDeviceListener>();
...
public void addBluetoothDeviceListener(BluetoothDeviceListener listener){
if (!listeners.contains(listener){
listeners.add(listener);
}
}
public void removeBluetoothDeviceListener(BluetoothDeviceListener listener){
if (listeners.contains(listener){
listeners.remove(listener);
}
}
当设备连接时:
for (BluetoothDeviceListener listener:listeners){
listener.onDeviceConnected(arg1, arg2);
}
当收到数据时:
for (BluetoothDeviceListener listener:listeners){
listener.onDataReceived(arg1, arg2);
}
在你的Activity中:
public class MainActivity extends Activity implements BluetoothDeviceListener{
...
@Override
public void onCreate(Bundle savedInstanceState)
{
...
manageConnection.setDeviceConnectedListener(this);
...
}
public void onDeviceConnected(int arg1, string arg2){
// do whatever you need to do
}
public void onDataReceived(int arg1, string arg2){
// do whatever you need to do
}
所有的内容都是从记忆中写出来的,所以请原谅错别字。
这种方法将类解耦。连接管理器类不知道活动的存在,它只是回调任何已注册的监听器。这些监听器可能是活动、服务或者是MySparklyUnicorn的实例。服务器既不知道也不关心。它只是说:“如果有人感兴趣,设备已连接,这里是详细信息。”
onDataReceived()
的接口方法。我编辑了接口定义。 - Simon