安卓 廣播在baseActivity中的封裝
阿新 • • 發佈:2019-02-08
之前專案使用的是 廣播來通知訊息 的 程式碼大家都知道
這是一個簡單的傳送廣播的程式碼片段 Intent intent = new Intent("net.jxx.action"); intent.putExtra(“type”, type); sendBroadcast(intent); 這是一個簡單的接受廣播的的程式碼片段 IntentFilter intentFilter = new IntentFilter( "net.jxx.action"); BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int type = intent.getIntExtra(“type”, -1); } }; registerReceiver(broadcastReceiver, intentFilter); unregisterReceiver(broadcastReceiver, intentFilter);
可是每一次都得寫這麼多的程式碼 。程式碼量比較大。後來使用enevtbus 需要許多的javabean物件。後樓梯不勝其煩.這次在封裝自己使用的mvp+retrofit+Rxjava+baseActivity(點選這裡)在考慮廣播的使用的時候,決定封裝到baseActivity。為什麼封裝到baseActivity。baseActivity中有activity的生命週期。可以直接註冊,登出。
但是問題出現了。比如說1個類 我需要好幾引數,怎麼辦?我使用的是可變引數。解決不管是幾個引數都需要註冊的問題。那麼這樣的話 在子activity 就可以實現一句話傳送廣播和接受廣播的問題。
同時為了具體區不同的狀況 。決定使用 介面來繫結區分收到的不同引數
/** 傳送的時候 只需要sendMyBroadcast(int type) */ public void sendMyBroadcast(int type) { sendBroadcast(Constant.createIntent( type)); } /** 接受的時候 initReceiver */ public void initReceiver(final BroadcastInterface myinterface, final int... statue) { intentFilter = new IntentFilter( Constant.ACTION); broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int type = intent.getIntExtra(Constant.BROADCAST_KEY_type, Constant.TYPE_NONE); if (type== Constant.TYPE_NONE){ myinterface.receiverFailure(); }else { myinterface.receiverSuccess( intent,type); } } }; getApplicationContext().registerReceiver(broadcastReceiver, intentFilter); }
這是常量類的引數
public class Constant {
public static Intent createIntent(int type) {
Intent intent = new Intent(ACTION);
intent.putExtra(BROADCAST_KEY_type, type);
return intent;
}
public static final String ACTION = "net.jxx.action";
public static final String BROADCAST_KEY_type = "type";
public static final int TYPE_NONE = -1;
}
這是繫結介面具體方法
public interface BroadcastInterface {
void receiverSuccess(Intent intent, int statue);
void receiverFailure();
}
子antivity中使用:
傳送的時候
sendMyBroadcast(1001);
子antivity中接受使用:
initReceiver(this,1001,1000);
同時注意 接受的activity實現介面 BroadcastInterface的方法
這樣就可以在介面中進行判斷了
@Override
public void receiverSuccess(Intent intent, int statue) {
Log.e("jxx",statue+">>");
Toast.makeText(MainActivity.this,statue+" ",Toast.LENGTH_SHORT).show();
content.setText(" "+statue);
}
@Override
public void receiverFailure() {
}
}
注意:廣播的註冊也需要unregisterReceiver