นี่คือสิ่งที่คล้ายกับคำตอบของ @Shiki แต่จากมุมมองของนักพัฒนา iOS และศูนย์การแจ้งเตือน
ขั้นแรกให้สร้างบริการ NotificationCenter บางประเภท:
public class NotificationCenter {
public static void addObserver(Context context, NotificationType notification, BroadcastReceiver responseHandler) {
LocalBroadcastManager.getInstance(context).registerReceiver(responseHandler, new IntentFilter(notification.name()));
}
public static void removeObserver(Context context, BroadcastReceiver responseHandler) {
LocalBroadcastManager.getInstance(context).unregisterReceiver(responseHandler);
}
public static void postNotification(Context context, NotificationType notification, HashMap<String, String> params) {
Intent intent = new Intent(notification.name());
for(Map.Entry<String, String> entry : params.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
intent.putExtra(key, value);
}
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
}
}
จากนั้นคุณจะต้องมีประเภท enum เพื่อป้องกันความผิดพลาดในการเข้ารหัสด้วยสตริง - (NotificationType):
public enum NotificationType {
LoginResponse;
}
นี่คือการใช้งาน (เพิ่ม / ลบผู้สังเกตการณ์) เช่นในกิจกรรม:
public class LoginActivity extends AppCompatActivity{
private BroadcastReceiver loginResponseReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Boolean result = Boolean.valueOf(intent.getStringExtra("isSuccess"));
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
NotificationCenter.addObserver(this, NotificationType.LoginResponse, loginResponseReceiver);
}
@Override
protected void onDestroy() {
NotificationCenter.removeObserver(this, loginResponseReceiver);
super.onDestroy();
}
}
และในที่สุดนี่คือวิธีที่เราโพสต์การแจ้งเตือนไปยัง NotificationCenter จากบริการโทรกลับหรือส่วนที่เหลือหรืออะไรก็ตาม:
public void loginService(final Context context, String username, String password) {
//do some async work, or rest call etc.
//...
//on response, when we want to trigger and send notification that our job is finished
HashMap<String,String> params = new HashMap<String, String>();
params.put("isSuccess", String.valueOf(false));
NotificationCenter.postNotification(context, NotificationType.LoginResponse, params);
}
แค่นั้นเองไชโย!