zoukankan      html  css  js  c++  java
  • Android 程序间的广播和Manifest找不到(解决方法)

     

    昨天写的是广播接收端的一些操作,

      今天学的是广播的发送,上节介绍的标准广播和有序广播指的是发送端发送后,接收端的广播形式。

      既然要发送,那就可以自定义发送广播:

      

     

       把EditText的内容拿出来广播。

      

      新建一个活动,并在AndroidManifest.xml里面注册好,然后调整为主活动

      

     

     

    因为牵扯到复用的问题,就直接定义了一个单独的类来装这些自定义的频道,因为这是自定义的广播嘛。

     

     

     如果嫌麻烦,就直接写字符串,频道一般是 (包名.自己的频道)

     

    好啦,现在就发送了啊,

    接着就新建一个项目吧,用来接收这个项目发出的广播。

    活动那边不管,直接用静态注册,

    第一步。新建类继承BroadcastReceiver

    package com.example.myintentfilterpractice;

    public class MessageReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    }
    }

     

    第二步。AndroidManifest注册接收器

    <receiver
    android:name=".MessageReceiver"
    android:enabled="true">
    <intent-filter>
    <action android:name="com.example.myintentfilter.SEND_MSG" />
    </intent-filter>
    </receiver>

     

    第三步。在新建类中接收上一个项目发出的广播

    package com.example.myintentfilterpractice;

    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.util.Log;
    import android.widget.Toast;

    public class MessageReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (ActionCoast.Action_SEND_MSG.equals(action)) {
    Log.e("MessageReceiver","actions == "+action);
    String stringExtra = intent.getStringExtra(ActionCoast.KEY_CONTENT);
    Log.e("Content","Content == "+stringExtra);
    Toast.makeText(context, ""+stringExtra, Toast.LENGTH_SHORT).show();
    }

    }
    }

    好,然后就是测试。。。(挺好,测试成功)
    广播的内容在Run里能输出,那一些有用的信息,也可以用广播的形式跨程序操作了。

     

     

     

     

     

     

    接着就是了解有序广播了

    有序广播的东西都是分级别进行接收,级别分别是-1000到1000

    设置级别后,级别高的优先接收到广播,然后还可以进行修改,或者终止广播,让后面级别低的接收者不能接收。

     

    测试有序广播的方法,分别写三个静态注册的类(分为三个级别,至于如何修改级别,得到AndroidManifest中设置)

     

     

    然后在AndroidManifest.xml中:

     

     至于:

    com.example.myintentfilter.ORDERED_SEND_MSG
    这个是自定义的频道,在自己定义的常量中写了,不过在AndroidManifest里的是不能用常量的,得去这里拿

     

     

    然后就是新建一个活动来测试有序广播:

     

     

    给有序广播设置好频道,这个就可以使用常量来表示了。

    然后发送有序广播可以写两个参数,也可以写七个参数。

    两个参数是只传递意向和权限,

    七个参数的是:

     

     现在只用到了157,第七个是为了给后面的接收者传递数据的

    然后向后面传递,可以很形象的看出来,老板发通知,给相关部门经理,然后经理看了,修改好后再给自己的下级,下级再修改。。。

     

     

     

     

     

     

    然后就可以测试了。。。(几个小时以后,,测试成功了,写了大半天,脑子嗡嗡的,忘了25(8.0)以后的静态广播都是隐式的,终于解决了)

    好,接着下面的内容;

    给其他项目发送广播

     

    模拟器是一个A项目里的,编辑器现在是B项目的Run窗口,可以看出,广播的到位了

    那我们现在想B只有拿到权限才能接收A项目的广播。

     在A(MyIntentFilter)里面设置好权限,然后让有序广播发送,这里牵扯到Manifest的问题

    默认的我的机器是找不到的,所以我重新创建了一个Manifest类

    并且给它设置权限(自己写好了Manifest后)第一个本项目的Manifest就可以用了

     

     加了权限后,B项目也就是(MyIntentFilterPractice)就不能接收A项目的广播了







    那怎么才能接收呢,就得添加权限许可;

    在B项目的AndroidManifest.xml里添加

    此时的项目就可以:

    只有添加了权限的才可以接收A项目的广播

    接下来的反过来,只有A项目添加了权限才可以发送广播到B项目:

    在A项目中:加一句权限许可

    B项目中自定义权限,然后给接收器Receiver设置权限

     仍然可以广播:

    如果A项目里的权限许可不写,就无法广播到B项目。。。

    今天的就到这,Manifest的特殊情况,就是自己创建一个常量类。

    有事比较充实的一天,广播到这就完啦,比较完整 ,很多地方都搞不过来,

    版本问题总是反应不过来,以后尽量用动态注册吧,例题用静态是写法比较方便,毕竟只创三个差不多的类,然后AndroidManifest注册就好。

    加油,一天吃透一点知识吧。

  • 相关阅读:
    oralce索引的使用
    oracle中connect by prior的使用
    oracle函数listagg使用
    oracle函数的使用
    redis高可用集群搭建
    Node.js安装及环境配置之Windows篇
    Repeater 合并单元格
    c#16进制转浮点数单精度类型
    EF Core 实体映射表或视图
    docker 构建filebeat镜像
  • 原文地址:https://www.cnblogs.com/aolong/p/13411148.html
Copyright © 2011-2022 走看看