android(eclipse)广播机制知识梳理(三)

时间:2023-03-10 04:28:35
android(eclipse)广播机制知识梳理(三)

1:分类:
   标准广播:没有先后顺序,无法被截断
   有序广播:又先后顺序,可以截断

2:接收广播:首先进行注册,注册的方式有静态注册和动态注册。也就是在代码中注册和在AndroidManifest中注册,并且一旦涉及到系统方面的关键性信息无论静态还是动态都要在manifest中声明权限:

  <users-permission andorid:name="android.permission.ACCESS_NETWORK_STATE"/>查询网络状态

<users-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>接受系统广播

<uers-permisson android:Name="android.permisson.SYSTEM_ALERT_WINDOW"/>弹出系统级别的对话框

  

<user-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name=".BootCmpleteReceiver">
<intent-filter>
<action android:name="android:intent.action.BOOT_COMPLETED"/>
</intent-filter>
</recerver>

发送标准广播

public calss MyBroadcastReceiver extends BroadcastReceiver{
@override
public void onReceive(Context context,Intent intent){
Toast.makeText(context,"*****",Toast.LENGTH_SHORT).show();
}}
<manifest xmlns:andorid=........>
<application.....>
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action andrid:name="com.example.broadcasttest.MYBROADCAST"/>
</receiver>
</application>
</manifest>
MainActivity:
Button button=(Button)findViewById(R.id。send);
burron.setOnClickListener(new OnClickListener(){
@override
public void onClick(View v){
Intent inten =new Intent("加入注册时约好的信号");
sendBroadcast(intent);//sendOrderBroadcast(intent,null)发送有序广播
}});

发送有序广播:
    需要在声明文件中加入<intent-filter android:priority="**">优先级表示语句

如果不希望继续传播那就在广播事件中加入 :abortBroadcast();

3:本地广播的使用

  

public class MainActivity extens Activity{
private IntentFilter intentFilter;
private LocalBroadcastManager LocalBroadcastManager;
private LocalReceiver localReceiver;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout...);
Button button=(Button) findViewById(R.id.send);
localBroadcastManager= LocalBroadcastManager.gerInstance(this);//获取实例
button.setOnClickLister(new OnClickListener(){
@override
public void onClick(View v){
Intent intent=new Intent(""com.example.broadcast.MYBROADCAST);
localBroadcastManager. sendBroadcast(intent);
}
});
intentFilter=new IntentFilter();
localReceiver=new LocalReceiver();
intentFilter.addAction("com.example.broadcast.MYBROADCAST");
localBroadcastManager.registerReceiver(localReceiver,intentFilter);
}
@Override
protected void onDestroy(){
super.onDestroy();
localBroadcastManager.unregisterReceiver(localReceiver);
}
@Override
class LocalReceiver(){
public void onReceive(){
......
}
}

本地广播为了安全性无法通过静态注册,一般静态注册实在实现开机启动的时候才会使用就是说程序还没打开就会先收到广播。

注意:在广播接收器里面启动活动的话一定要使用intent.addFlags(Intenten.FLAG_ACTIVITY_TASK)

还有如果只是调用类的静态方法的话 那么不用实例化也可以的,静态方法不是属于累对象的,是属于类的。