Receiver向Activity传递数据

今天要写以后测试的例子,需要在受到广播以后将一些数据传递个Activity,除了第三方的EventBus一下子还没想到好的方法,我们知道Activity想其他组件传递数据,简单的就使用Intent携带过去就好了,但是从Receiver向Activity传递数据呢,其实可以使用回调接口。

就像Activity中的button也是使用的回调接口,Button类就将用户点击的响应传递个了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 );
			}

	}
	//回调接口
	interface Info{
		void getString(String str);
	}
	//传递回调对象
	public void setInstance(Info info){
		this.info= info;
	}
}

在Activity中就像实现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");//闹钟触发广播
          this.registerReceiver(testBrocaster, filter);
          
          //因为要这是回调对象,所以需要使用动态注册广播
          testBrocaster .setInstance(this);
    }

    @Override
    public void getString(String str) {
    	//在这个回调方法中就获取到了广播中传递的数据了。
        Toast.makeText(WifiActivity.this, str, Toast.LENGTH_LONG).show();
    }
}

仔细看看是不是和实现Button点击的OnClickListener接口很像,再往下推一步,所有想要向Activity中传递数据的行为,都可以使用这种回调接口的方式。

猜你喜欢

转载自blog.csdn.net/static_zh/article/details/86244744