• 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)

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

     

     

  • 相关阅读:
    开发环境之Webpack
    开发环境之Nginx
    Winfrom排坑
    Winfrom打包教程(Inno Setup工具)
    博客园美化教程
    开发环境之Tomcat
    IDEA编码时卡顿问题
    学习Spring5源码时所遇到的坑
    docker+jmeter+influx+granfana搭建性能测试监控平台
    Windows10上安装 WSL---Ubuntu
  • 原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5303571.html
Copyright © 2020-2023  润新知