精华内容
下载资源
问答
  • Android广播静态注册

    2021-05-28 03:05:05
    如果了解网络通信原理的,应该知道,在一个IP网络范围中,最大的IP地址是被保留作为广播的地址使用的,比如某个网络的IP范围是192.168....而Android中的广播机制则更为灵活,因为每个应用程序可以对自己感兴趣的广播...

    如果了解网络通信原理的,应该知道,在一个IP网络范围中,最大的IP地址是被保留作为广播的地址使用的,比如某个网络的IP范围是192.168.0.XXX,子网掩码是245.245.245.0,那么这个网络的广播地址是192.168.0.245.广播的数据会发给同一网络上的所有端口,这样该网络中的每台主机都将会受到这条广播。

    而Android中的广播机制则更为灵活,因为每个应用程序可以对自己感兴趣的广播进行注册,这样程序只需要接受到自己关心的广播内容,例如关闭启动WiFi。

    而Android中的广播主要分为两种类型:

    标准广播,是一种完全异步执行的广播,在广播发出后,所有的接收器都会接收到该广播,而且几乎是同一时间,因此没有前后顺序之分,效率非常高。但是同时也意味着,它无法被拦截

    有序广播,是一个同步执行的广播,在广播发出后,同一时间只会有一个接收器收到该广播信息,当这个接收器的所有逻辑执行完毕之后广播才会继续向下个接收器传递,这个时候优先级高的接收器就会先接收到广播,并且可以拦截广播

    那么在广播中,最基础的就是静态注册广播接收器

    首先新建一个Java类,通过"New/Other/Broadcast Receiver",命名为MyReceiver,添加以下内容

    public MyReceive{

    public void OnReceive(Context context,Intent intent){

    Toast.maetText(context,"收到一条广播",toast.LENGTH_LONG).show();

    }

    }

    然后在MainAcitivity中添加一个类

    public void sendBc(View view){

    sendBroadcast(new Intent(this.MyReceive.class));

    }

    然后在AndroidManifest.xml注册

    最后在XML中新建一个Button,添加一个onclick

    android: >

    展开全文
  • 今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式。 BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。在Android系统中,广播体现在...
  • Android关于广播静态注册和动态注册及广播数据写入界面的心得体会 记得在我上学的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要的通知,就会播放一条广播来告知全校...
  • 静态注册:可以在程序未启动的情况下接收到广播 二、静态注册实现开机启动 1.新建广播接收器BootCompleteReceiver *Exported:表示是否允许这个广播接收器接收本程序以外的广播 *Enabled:表示是否启用这个广播接收...

    一、区别

    1.动态注册:必需在程序启动后才能接收到广播

    2.静态注册:可以在程序未启动的情况下接收到广播

    二、静态注册实现开机启动

    1.新建广播接收器BootCompleteReceiver

    *Exported:表示是否允许这个广播接收器接收本程序以外的广播

    *Enabled:表示是否启用这个广播接收器

    *静态的广播接收器一定要在AndroidManifest.xml中注册才能使用(使用快捷方式创建的广播接收器自动注册)

      <receiver
                android:name=".BootCompleteReceiver"
                android:enabled="true"
                android:exported="true"></receiver>

    *敏感操作,注意权限

     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    *Android系统启动后会发出一条值为 android.intent.action.BOOT_COMPLETED 的广播,需要添加相应的action

    <receiver
                android:name=".BootCompleteReceiver"
                android:enabled="true"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>
    </receiver>

    展开全文
  • Broadcast Action: The current device(orientation, locale, etc) has changed. When such a change happens, theUIs (view hierarchy) will need to be rebuilt based on this newinformation;...

    Broadcast Action: The current device

    (orientation, locale, etc) has changed. When such a change happens, the

    UIs (view hierarchy) will need to be rebuilt based on this new

    information; for the most part, applications don't need to worry about

    this, because the system will take care of stopping and restarting the

    application to make sure it sees the new changes. Some system code that

    can not be restarted will need to watch for this action and handle it

    appropriately.

    You can not receive this through components declared

    in manifests, only by explicitly registering for it with

    .

    This is a protected intent that can only be sent

    by the system.

    展开全文
  • 解决安卓Android 8.0以上的静态广播无法注册

    千次阅读 多人点赞 2019-07-17 15:08:26
    1.先使用Android Studio创建一个广播接收类。File->New->Other->Broadcast Receiver,先创建一个广播类,这个创建的类会自动帮我们继承BroadcastReceiver类,接收广播,需要继承这个类。 package ...

    Android 8.0以上需要setComponent()来指定包名和类名,第1个参数是指接收广播类的包名,第2个参数是指接收广播类的完整类名。
    静态广播
    1.先使用Android Studio创建一个广播接收类。File->New->Other->Broadcast Receiver,先创建一个广播类,这个创建的类会自动帮我们继承BroadcastReceiver类,接收广播,需要继承这个类。

    • MyReceiver.java
    public class MyReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO: This method is called when the BroadcastReceiver is receiving
            // an Intent broadcast.
            Toast.makeText(context, "收到广播", Toast.LENGTH_SHORT).show();
        }
    }
    

    上面的代码,很简单,就是在接收到广播时,弹出一个toast提示框。
    2.发送广播
    在界面上添加一个Button按钮,然后编写按钮的onclick事件。

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button btn1=findViewById(R.id.btn1);
            btn1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent("com.example.boardreceiver1.broadcast1");//这一步可以分解为下面两步
    //                Intent intent=new Intent();
    //                intent.setAction("com.example.boardreceiver1.broadcast1");
                    intent.setComponent(new ComponentName("com.example.boardreceiver1","com.example.boardreceiver1.MyReceiver"));
    // 上面这一行在Android 7.0及以下版本不是必须的,但是Android 8.0或者更高版本,发送广播的条件更加严苛,必须添加这一行内容。
    // 创建的ComponentName实例化对象有两个参数,第1个参数是指接收广播类的包名,第2个参数是指接收广播类的完整类名。
                   sendBroadcast(intent,null);
                }
            });
        }
    }
    

    3.运行结果
    在这里插入图片描述
    发送两个不同的广播
    在这里插入图片描述

    • MyReceiver
    
    public class MyReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
         
           switch (intent.getAction()){
               case "广播1":
                   Toast.makeText(context, "我收到了广播1", Toast.LENGTH_SHORT).show();
                   break;
               case "广播2":
                   Toast.makeText(context, "我收到了广播2", Toast.LENGTH_SHORT).show();
                   break;
           }
        }
    }
    
    
    • MainActivity
    public class MainActivity extends AppCompatActivity {
          @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            findViewById(R.id.send1).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent1=new Intent();
                    intent1.setAction("广播1");
                    intent1.setComponent(new ComponentName(getPackageName(),getPackageName()+".MyReceiver"));
                    sendBroadcast(intent1);
                }
            });
            findViewById(R.id.send2).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent inten2t=new Intent();
                    inten2t.setAction("广播2");
                    inten2t.setComponent(new ComponentName(getPackageName(),getPackageName()+".MyReceiver"));
                    sendBroadcast(inten2t);
                }
            });
        }
    }
    

    动态广播

    先在Manifest文件中删除下面内容

            <receiver
                android:name=".MyStaticReceiver"
                android:enabled="true"
                android:exported="true"></receiver>
    

    然后上图
    在这里插入图片描述
    可以看到,直接发广播是没有用的,要注册了之后才行
    代码

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            findViewById(R.id.active_BC).setOnClickListener(this);
            findViewById(R.id.static_BC).setOnClickListener(this);
            findViewById(R.id.register).setOnClickListener(this);
            findViewById(R.id.unregister).setOnClickListener(this);
        }
        public MyActiveReceiver mReceiver=null;
        IntentFilter mFilter=new IntentFilter(MyActiveReceiver.ACTION);
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.static_BC:
                    sendStaticBC();
                    break;
                case R.id.active_BC:
                    Intent i=new Intent(MyActiveReceiver.ACTION);
                    sendBroadcast(i);
                    break;
                case R.id.register:
                    if (mReceiver==null){
                        mReceiver=new MyActiveReceiver();
                        registerReceiver(mReceiver,mFilter);
                    }
                    break;
                case R.id.unregister:
                    if (mReceiver!=null){
                        unregisterReceiver(mReceiver);
                        mReceiver=null;
                    }
                    break;
            }
        }
    
        private void sendStaticBC() {
            Intent intent=new Intent(getPackageName());
            intent.setComponent(new ComponentName(getPackageName(),getPackageName()+".MyStaticReceiver"));
            sendBroadcast(intent);
        }
    }
    
    

    MyActiveReceiver

    public class MyActiveReceiver extends BroadcastReceiver {
        public static final String ACTION = "xxxxxxxxxxxxxxxxx";
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "我收到了动态广播", Toast.LENGTH_SHORT).show();
        }
    }
    
    

    下面这个为了配合第二个动态广播的静态接收广播类。

    public class MyStaticReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "收到了静态广播!", Toast.LENGTH_SHORT).show();
        }
    }
    
    展开全文
  • 不能静态注册广播:android.intent.action.SCREEN_ONandroid.intent.action.SCREEN_OFFandroid.intent.action.BATTERY_CHANGEDandroid.intent.action.CONFIGURATION_CHANGEDandroid.intent.action.TIME_TICK原因:...
  • 静态注册二、默认广播与有序广播1.Normalbroadcasts:默认广播2.orderedbroadcasts:有序广播总结 一、静态和动态注册方式 1.动态注册 编写一个继承BroadcastReceiver的广播接收器的类 // 动态广播接收器 class ...
  • 广播(静态注册)

    2014-07-03 14:09:22
    广播 静态注册 android
  • Android 系统升级到8.0之后,一些广播无法静态注册
  • 主要介绍了Android实现静态广播监听器的方法,涉及Android广播机制与记录监听广播信息的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • android 静态注册广播

    2021-05-26 18:26:29
    2、在AndroidManifest.xml 中注册广播(静态注册),过滤接收广播类型(可以接收自己发送的广播,也可以接收系统的广播);(二)发送广播 (自己的广播)1、在程序中使用 Intent 发送广播,并给广播加上标识便于接收者识别...
  • Android 广播Broadcast的两种注册方式静态和动态

    万次阅读 多人点赞 2017-04-01 18:14:35
    Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作...
  • Android静态广播的例子

    2017-02-03 13:37:20
    Android静态广播的例子
  • Android中的广播主要可以分为两种类型:标准广播和有序广播。 标准广播是一种完全异步执行的广播,在广播发出之后,所有的广播接收器几乎都会在同一时刻接收到这条广播信息,因此它们之间没有任何先后顺序可言。...
  • Android静态/动态注册广播的区别

    千次阅读 2016-06-12 15:35:29
    广播接收器注册一共有两种形式 : 静态注册和动态注册. 两者及其接收广播的区别: 1.动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。 静态注册是常驻...
  • 解决方案:在APP的Activity中对广播接收进行动态注册即可完成。public class NetWorkStateReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {System.out....
  • 这是一个开机自启demo,也是一个静态注册广播接收器的学习demo。学无止境,希望食用愉快。。。。。。。。
  • 版权声明:本文为博主原创文章,未经博主允许不得转载:...第一个坑:Android8.0使用静态注册广播无效 贴代码: 点击发送: 静态注册: 结果: 如果没: intent.setPackage(getPacka...
  • Google说明的,android 8.0(API26)开始,对清单文件中静态注册广播接收者增加了限制,建议不要在清单文件中静态注册广播接收者。否则会接收不到。如果一定要静态注册,需要在发送广播的时候添加以下代码: intent....
  • Android8.0在AndroidManifest.xml文件中静态注册广播接收失效是由于官方对耗电量的优化,避免APP滥用广播的一种处理方式。除了少部分的广播仍支持静态注册(如开机广播),其余的都会出现失效的情况。 解决方案: ...
  • 广播接收器使用静态注册方式使用时,除了一些例外,这个接收器接收不到隐式广播。 注意这个“隐式”是重点。看了网上几篇文章,对这个变更理解有误。错误的理解是:8.0后,广播接收器使用静态注册,是无法使用的。...
  • 最近在写android第一行代码里面的代码,写到静态广播部分,照着书上敲代码,但是静态广播接收不到主活动发送的广播消息, 接收广播的类为: public class MyBroadcastReceiver extends BroadcastReceiver { @...
  • 查文档发现对静态注册增加了限制 解决方法:可以用setPackage限定发送给谁。 findViewById(R.id.bt11).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {
  • package ...import androidx.appcompat.app.AppCompatActivity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.c...
  • 2.掌握动态注册 Broadcast 和静态注册 Broadcast 3.掌握Notification 编程基础 4.掌握 EventBus 编程基础 二、 实现内容 在上个实验的基础上,实现静态广播、动态广播两种改变Notification内容的方法。 ...
  • android 8.0(API26)开始,对清单文件中静态注册广播接收者增加了限制,建议大家不要在清单文件中静态注册广播接收者 解决办法: 向其他应用中静态注册广播接收者发送广播 //获取 Intent 对象 I...
  • android.intent.action.BOOT_COMPLETED的广播发送之后,sd卡才被挂载,所以广播接收器接收不到该广播。 解决办法:同时监听开机和sd卡挂载。 <receiver android:name=".BootCompleteReceiver" android:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,995
精华内容 9,998
关键字:

安卓广播静态注册