浅谈BroadcastReceiver的用法

来源:互联网 发布:心理咨询 成都 知乎 编辑:程序博客网 时间:2024/06/02 02:34

  最近看了下关于广播方面的东西,加深了理解,也纠正了自己以前的不正确的看法。

  关于广播有2中注册方式,一种是在代码中注册,也叫动态注册,另一种是在AndroidManifest里面注册,也叫静态注册。

  不管在哪个里面注册,都需要发送广播sendBroadcast()。广播发送的是一个Intent,intent里面一般是action。

  如果是在代码里面注册,一般在onResume()方法里面注册。

@Override protected void onResume() { // TODO Auto-generated method stub   myReceiver = new MyReceiver(); IntentFilter filter = new IntentFilter(); //向过滤器中添加action   filter.addAction("com.android.shang"); //注册广播   registerReceiver(myReceiver, filter); Intent intent = new Intent(); intent.setAction("com.android.xiang"); //发送广播   sendBroadcast(intent); super.onResume(); }

  在onPause()方法里面要取消注册。

1 @Override2 protected void onPause() {3 // TODO Auto-generated method stub4 unregisterReceiver(myReceiver);5 super.onPause();6 }

  当然,也可以在xml文件中注册:

<receiver android:name=".MyBrocastReceiverTest"> <intent-filter> <action android:name="com.android.xiang"></action> </intent-filter> </receiver>

  如果发送的广播的action已经注册了,那么在onReceive()方法中就会接收到发过来的广播,继而做出一些处理。

  你可以写出一个内部类:

1 class MyReceiver extends BroadcastReceiver { 2 3 @Override 4 public void onReceive(Context context, Intent intent) { 5 // TODO Auto-generated method stub 6 //从这里的log中可以看到是否接受到了广播 7 System.out.println("intent = " + intent); 8 } 9 10 }

  当然也可以单独写一个类:

package com.android.TestBrocastReceiver;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class MyBrocastReceiverTest extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub System.out.println("intent = " + intent); }}

  一般如果在代码里面注册,就把广播写在代码里面,在xml文件中注册就单独写一个类。

  注册在代码里面:

package com.android.TestBrocastReceiver; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; public class TestBrocastReceiver extends Activity { MyReceiver myReceiver; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override protected void onPause() { // TODO Auto-generated method stub unregisterReceiver(myReceiver); super.onPause(); } @Override protected void onResume() { // TODO Auto-generated method stub myReceiver = new MyReceiver(); IntentFilter filter = new IntentFilter(); //向过滤器中添加action filter.addAction("com.android.shang"); //注册广播 registerReceiver(myReceiver, filter); Intent intent = new Intent(); intent.setAction("com.android.xiang"); //发送广播 sendBroadcast(intent); super.onResume(); } class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //从这里的log中可以看到是否接受到了广播 System.out.println("intent = " + intent); } } }

  注册在xml文件中:

在xml文件中注册,写上一个广播类,然后在activity中发送广播就可以了。

有时系统会发出一些广播,比如说时间的变化等,时间走一秒就会发一个广播,这时我们可以监听这个广播,然后在接收器中做处理就可以了,而不需要在发广播了。


原创粉丝点击