上一篇文章介绍了在AndroidManifest.xml文件中定义过滤器的方法,这篇文章讲解使用java代码定义这些过滤器。
首先,介绍在xml文件中定义过滤器的弊端。如果开发者在xml文件中定义的不是系统级事件,正如上一篇文章中的那样,那么不管用户的应用程序是否关闭,Receiver程序始终处于运行(监听)状态,直到用户手机关闭。这样,就会对内存和手机电量造成极大的浪费,所以当用户不需要定义系统级事件时,可以使用简单的java代码实现过滤器的注册。
下面是具体的实现代码:
public class BroadcastReceiver01 extends Activity {
private Button button;
private Button button2;
private Broadcast_receiver brReceiver01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broadcast_receiver01);
button=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
brReceiver01=new Broadcast_receiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction("BruceZhang");
registerReceiver(brReceiver01, intentFilter);
Intent intent=new Intent("BruceZhang");
// 由于是并不是使用内置的Action,所以系统不会发出这个广播事件,仍然需要用户手动的去广播
sendBroadcast(intent);
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
unregisterReceiver(brReceiver01);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_broadcast_receiver01, menu);
return true;
}
}
public class Broadcast_receiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
Log.d("BruceZhang", "This is BroadcastReceiver!!!"+arg1.getAction());
if(arg1.getAction()=="BruceZhang"){
Log.d("BruceZhang", "---->This is BroadcastReceiver!!!");
}
}
}