原創(chuàng)安新小子最后發(fā)布于2019-01-10 17:51:23 閱讀數(shù) 154收藏
今天要寫以后測試的例子,需要在受到廣播以后將一些數(shù)據(jù)傳遞個Activity,除了第三方的EventBus一下子還沒想到好的方法,我們知道Activity想其他組件傳遞數(shù)據(jù),簡單的就使用Intent攜帶過去就好了,但是從Receiver向Activity傳遞數(shù)據(jù)呢,其實可以使用回調(diào)接口。
就像Activity中的button也是使用的回調(diào)接口,Button類就將用戶點擊的響應(yīng)傳遞個了Activity。代碼如下:
class TestBrocastReceiver extends BroadcastReceiver {
private static final String TAG = "TestiBrocastReceiver";
private Info info;
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.e(TAG,"廣播接受者的類型:" + action);
if(info != null){
info.getString(action );
}
}
//回調(diào)接口
interface Info{
void getString(String str);
}
//傳遞回調(diào)對象
public void setInstance(Info info){
this.info= info;
}
}
在Activity中就像實現(xiàn)button點擊的接口一樣
public class TestiActivity extends Activity implements TestBrocastReceiver.Info{
? ? @Override
? ? protected void onCreate(Bundle savedInstanceState) {
? ? ? ? super.onCreate(savedInstanceState);
? ? ? ? setContentView(R.layout.activity_wifi);
? ? ? ? TestBrocastReceiver testBrocaster = new TestBrocastReceiver();
? ? ? ? ? IntentFilter filter = new IntentFilter();
? ? ? ? ? filter.addAction("com.test");//鬧鐘觸發(fā)廣播
? ? ? ? ? this.registerReceiver(testBrocaster, filter);
? ? ? ? ? //因為要這是回調(diào)對象,所以需要使用動態(tài)注冊廣播
? ? ? ? ? testBrocaster .setInstance(this);
? ? }
? ? @Override
? ? public void getString(String str) {
? ? //在這個回調(diào)方法中就獲取到了廣播中傳遞的數(shù)據(jù)了。
? ? ? ? Toast.makeText(WifiActivity.this, str, Toast.LENGTH_LONG).show();
? ? }
}
仔細(xì)看看是不是和實現(xiàn)Button點擊的OnClickListener接口很像,再往下推一步,所有想要向Activity中傳遞數(shù)據(jù)的行為,都可以使用這種回調(diào)接口的方式。