İşte @Shiki yanıtına benzer bir şey, ancak iOS geliştiricileri ve Bildirim merkezi açısından.
Önce bir tür NotificationCenter hizmeti oluşturun:
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);
}
}
Ardından, dizelerle kodlamadaki hatalardan korunmak için bazı enum türlerine de ihtiyacınız olacak - (NotificationType):
public enum NotificationType {
LoginResponse;
}
Örneğin etkinliklerde kullanım (gözlemcileri ekle / kaldır):
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();
}
}
ve nihayet, bazı geri arama veya dinlenme hizmetlerinden veya her neyse, NotificationCenter'a nasıl bildirim gönderiyoruz:
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);
}
işte bu, şerefe!