BroadcastReceiver: 广播的一种实现
个人理解: 当我们需要判断电池是否没电、收到短信、等一系列动作的时候,系统会发送相应的广播,
通知系统中所有捕获该广播的软件,软件可以做相应的动作
1 静态注册方式,就是在AndroidManifest.xml直接注册
代码: 1) 创建一个类 并实现BroadcastReceiver
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; /** * 静态广播测试 * @author root * */ public class BroadcastReceiverHelper2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.e( action, action ); if(action!=null && "com.android.broadcast.RECEIVER_ACTION".equals( action) ){ System.out.println( "11111111"); //则输出日志 Log.e("com.android.broadcast.RECEIVER_ACTION", "com.android.broadcast.RECEIVER_ACTION"); } if(action!=null && "com.android.broadcast.RECEIVER_ACTION2".equals( action) ){ System.out.println( "222222222"); //则输出日志 Log.e("com.android.broadcast.RECEIVER_ACTION2", "com.android.broadcast.RECEIVER_ACTION2"); } } }
2 注册 静态广播对象,包含两个action,任何一个action命中,这个广播都会执行
<!-- 静态注册广播 --> <receiver android:name="me.zhangls.tabsfragment.broadcastReceiver.BroadcastReceiverHelper2" > <intent-filter> <action android:name="com.android.broadcast.RECEIVER_ACTION" /> <action android:name="com.android.broadcast.RECEIVER_ACTION2" /> </intent-filter> </receiver>
3 发送测试广播的按钮布局
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:id="@+id/send_button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:onClick="sendReceive" android:text="发送广播1" /> <Button android:id="@+id/send_button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:onClick="sendReceive2" android:text="发送广播2" /> </LinearLayout>
4 执行按钮的方法
/** * 测试 ACTION = "com.android.broadcast.RECEIVER_ACTION";是否可以执行广播 * @param view */ public void sendReceive(View view ){ //实例化Intent Intent intent=new Intent(); //设置Intent的action属性 intent.setAction(ACTION); //发出广播 sendBroadcast(intent); } /** * 测试 ACTION2 = "com.android.broadcast.RECEIVER_ACTION";是否可以执行广播 * @param view */ public void sendReceive2(View view ){ //实例化Intent Intent intent=new Intent(); //设置Intent的action属性 intent.setAction(ACTION2); //发出广播 sendBroadcast(intent); }
二、动态广播使用
1 注册 2 发送 3 接触注册
1、创建广播类
/** * 动态广播测试 * @author root */ public class BroadcastReceiverHelper extends BroadcastReceiver { //定义日志标签 private static final String TAG = "TestDTBroadcast"; @Override public void onReceive(Context context, Intent intent) { Log.e(TAG, "dynamic broadcast 。。。。。。。。"+TAG); } }
2、广播类的注册、发送、解除注册的方法
/** * 测试 ACTION2 = "com.android.broadcast.RECEIVER_ACTION";是否可以执行广播 * @param view */ public void sendReceive2(View view ){ //实例化Intent Intent intent=new Intent(); //设置Intent的action属性 intent.setAction(ACTION2); //发出广播 sendBroadcast(intent); } /** * 动态注册的广播 ,用此方法发送 * @param view */ public void sendReceive1(View view ){ Intent intent=new Intent(); intent.setAction(ACTION3); sendBroadcast(intent); } /** * 动态注册广播 * @param view */ public void addListener(View view ){ receiver=new BroadcastReceiverHelper(); IntentFilter filter=new IntentFilter(); filter.addAction(ACTION3); //动态注册BroadcastReceiver registerReceiver(receiver, filter); } /** * 移除注册的动态广播 * @param view */ public void remListener(View view ){ unregisterReceiver(receiver); }