Receiver.java
2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.polysoft.nafmii.broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public abstract class Receiver<T> extends BroadcastReceiver {
private static final Map<String, Receiver> registerMap = new HashMap<>();
protected final Context context;
protected final Map<String, ReceiverListener<T>> listenerMap = new HashMap<>();
private final String KEY_DEFAULT_LISTENER = "DEFAULT_LISTENER";
protected Receiver(Context context) {
this.context = context;
}
protected static <T> Receiver<T> getReceiver(Class<? extends Receiver> receiver) {
return registerMap.get(receiver.getName());
}
protected static void onSendBroadcast(Context context, Intent intent) {
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
protected abstract String[] getActions();
protected abstract T onReceiverData(String action, Intent intent);
public void register() {
if (null != getReceiver(this.getClass())) {
return;
}
IntentFilter filter = new IntentFilter();
String[] actions = this.getActions();
for (int i = 0; i < actions.length; i++) {
filter.addAction(actions[i]);
}
LocalBroadcastManager.getInstance(this.context).registerReceiver(this, filter);
registerMap.put(this.getClass().getName(), this);
}
public void unregister() {
this.listenerMap.clear();
if (null == getReceiver(this.getClass())) {
return;
}
registerMap.remove(this.getClass().getName());
LocalBroadcastManager.getInstance(this.context).unregisterReceiver(this);
}
public void addDefaultListener(ReceiverListener<T> listener) {
this.addListener(KEY_DEFAULT_LISTENER, listener);
}
public void addListener(String key, ReceiverListener<T> listener) {
this.listenerMap.put(key, listener);
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
T data = this.onReceiverData(action, intent);
Iterator<String> iterator = this.listenerMap.keySet().iterator();
while (iterator.hasNext()) {
ReceiverListener<T> listener = this.listenerMap.get(iterator.next());
// 同步判断
if (null != listener) {
listener.onReceiverResult(action, data);
}
}
}
}