[ static broadcast receiver]
1. Activity 通过sendBroadcast()发送Intent数据2. MyReceiver接收broadcast 所发送的Intent,并通过Intent提取参数
[ In Activity ]
在当前Activity类中,有如下代码片段,用于broadcast IntentIntent intent = getIntent4Broadcast();
/*the same as
*this.sendBroadcast(intent);*/
sendBroadcast(intent);
public Intent getIntent4Broadcast(){
Bundle b = new Bundle();
b.putString("arg0","data1");
Intent intent = new Intent();
/* Receiver will filter the term
* com.example.lab3.static_bc*/
intent.setAction("com.example.lab3.static_bc");
intent.putExtra("data", b);
return intent;
}
[ Definite BroadcastReceiver ]
e.g. MyReceiver.java
extends BroadcastReceiver 重新定义onReceive接口
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
Bundle b = intent.getBundleExtra("data");
// do something with b
}
}
[ Manifest.xml ]
静态定义的BroadcastReceiver需要在Manifest中注册Receiver
<application
...
...>
...
...
//MyReceiver 是receiver的类名
<receiver android:name="MyReceiver" >
<intent-filter>
<action android:name="com.example.lab3.static_bc" >
</action>
</intent-filter>
</receiver>
...
...
</application>
[ dynamic broadcast receiver ]
1. 在Activity中定义Receiver和IntentFilter
2. 在onCreate中发送broadcast, 定义的Receiver处理broadcast
2. 在onCreate中发送broadcast, 定义的Receiver处理broadcast
[ 在Activity中,定义BroadcastReceiver ]
...
/*definite inner class
* 定义内部类 BroadcastReceiver
*/
public BroadcastReceiver bcr = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
//do something with intent
}
};
...
[ 在Activity中注册BroadcastReceiver ]
在哪个函数里register BroadcastReceiver,又在哪个函数里unregister呢?
参考:在发送broadcast之前,确保已经register了。
when click app-icon onCreate()->onStart()->onResume()
when click back_btn onPause()
可以在onStop()中写unregister, 在onCreate()和onStart()中register.
...
private IntentFilter filter = new IntentFilter();
...
//register receiver
filter.addAction("com.example.lab3.dynamic_bc");
registerReceiver(bcr, filter);
...
//unregister receiver
unregisterReceiver(bcr);
...
[ broadcast intent ]
Intent intent = initializeTheIntentForBroadcast();
sendBroadcast(intent)