android 类中的 广播怎么使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 类中的 广播怎么使用相关的知识,希望对你有一定的参考价值。

首先根据广播应用内接收和应用外接收,分类管理

 LocalBroadcastManager,应用内广播管理类
 BroadcastManager  广播管理类(部分应用内,应用外)


 广播接收类实现的两种方式

    代码生成类,并注册

    androidManifest.xml 文件中配置广播接收类



消息发送的两种方式

Normal broadcast,通过Context.sendBroadcast 发送,接口器不按照顺序,异步处理
Ordered broadcasts,通过Context.sendOrderedBroadcast发送,

由于每个接收器依次执行时,它可以传播的结果到下一个接收器,或者它可以完全中止该广播,以便它不会被传递给其他接收者。排列顺序为接收器的优先级。

参考技术A 在AndroidManifest.xml文件中的<application>节点里进行订阅,比如和开机广播
<receiver android:name=".IncomingSMSReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>本回答被提问者采纳

详解广播机制,Broadcast Receiver,Android进阶必备知识。

  直奔主题,关于广播的一些定义什么的我觉得只要是一名合格的初级android开发这都知道吧,我下面要做的就是怎么去使用broadcast receiver。

  1.怎么去监听系统广播?

  Android系统有很多内置的系统广播:电话,短信,时间,地区,电池电量,网络变化等等。。。那么我们怎么去在我们的应用中实现监听呢?下面我们以监听手机网络发生改变的广播进行监听,都知道广播有两种注册方式,在这里我使用的代码注册的方式,为的是能更好的去理解广播运行机制。在代码中注册一定要注意在你使用完毕的时候一定要反注册掉,一定要反注册掉,一定要反注册掉。下面看代码:

public class MainActivity extends Activity{
    private IntentFilter intentFilter;
    private NetWorkChangeReceiver netWorkChangeReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        netWorkChangeReceiver = new NetWorkChangeReceiver();
        registerReceiver(netWorkChangeReceiver,intentFilter);
    }

    class NetWorkChangeReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isAvailable()){
                Toast.makeText(context,"network is available",Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(context,"network is unavailable",Toast.LENGTH_SHORT).show();
            }

        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(netWorkChangeReceiver);
    }
}

在这里我实现了对网络的监听,监听当前的网络是否可用。Android系统为了保证程序的安全性规定查询网络状态必须需要权限,所以我在清单文件中注册了权限:

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

这个程序你可以拷贝下来去跑跑。

  2.静态注册?

  上面用到的是动态注册,主要是为了让我们能更加清晰的去了解广播机制的运行。但是不可否认的是静态注册的方便性。动态注册可以让我们去很好的管理广播的注册和注销,非常灵活但是有一个致命的缺点就是必须在应用启动之后,我们这个广播接收器才可以使用。静态注册恰恰弥补了这一点,在你不启动程序的情况下,就可以去监听相关广播(这也是为什么很多恶意软件都是使用这种方式来坑你,但是你要知道,没有哪款应用会在你一次也没有启动过的情况下去启动它本身的运行机制。说简单一点就是,如果你下来了一个病毒,但是你一次也没有打开运行过,那么它对你是不会产生危害的)。下面依然用例子说话:

  下面实现监听开机广播的程序,不能忘权限问题,先在清单中加权限:

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

  下面创建我们的接收器:

public class BootCompleteReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"启动成功",Toast.LENGTH_SHORT).show();
    }
}

在这里代码就很简单了,只需要做我们的逻辑处理就好了,主要就是在清单文件中的注册

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

好了 ,相信你看了这两个例子已经明白了广播的运行机制了,在例子中我们只是弹出了几个toast,你可以在里面做你自己的逻辑运算。

知道广播的定义,说明你在入门。

当你看懂这两个例子并且可以熟练运用之后你就是初阶了,如果你把后面那篇文章也能吃透的话,就是算是迈向中阶的第一步了。

  



以上是关于android 类中的 广播怎么使用的主要内容,如果未能解决你的问题,请参考以下文章

android中的广播是啥意思

Android 广播 - 使用权限发送和接收

android Broadcast广播消息代码实现

android 广播接收不到

android怎么发送特定广播的?

详解广播机制,Broadcast Receiver,Android进阶必备知识。(附使用广播实现一键强制下线功能)