我创建了一个处理所有蓝牙连接的类ManageConection。该类实现了Singleton模式。
但我有以下问题,不知道如何从我的班级ManageConection告诉一个活动,例如设备连接成功。
ManageConection类将使用各种活动。
感谢。
答案 0 :(得分:1)
您可以通过多种方式实现这一目标:
1。使用广播接收器。 在您的活动中:
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();
}
来自ManageConection
班级:
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();
答案 1 :(得分:0)
定义一个接口并使用回调让活动知道设备已连接或接收到数据。
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
}
在您的ManageConnection类
中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);
}
在您的活动中:
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的实例。服务器既不知道也不关心。它只是说“如果有人感兴趣,设备已连接,这里是详细信息”。
答案 2 :(得分:0)
在我看来,您可以使用以下任何一种方式:
我知道还有更多方法,但这些方法都是最通用的方法。
<强>更新强>
另外,对于组件的松散耦合,您可以查看Event Driven programming for android
祝你好运!