zoukankan      html  css  js  c++  java
  • 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)

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

     

     

  • 相关阅读:
    Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
    大型网站系统架构技术原理透析
    大中型网站架构探秘
    大型网站架构不得不考虑的10个问题
    (推荐)高并发高流量网站架构详解
    可扩展、高可用、负载均衡网站架构设计方案
    nginx内置常用变量
    Linux下nginx支持.htaccess文件实现伪静态的方法!
    扩展js,实现c#中的string.format方便拼接字符串
    Winform退出运行后,删除运行目录(批处理方法)
  • 原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5303571.html
Copyright © 2011-2022 走看看