Android入门之动态BroadCast的使用教程

 更新时间:2022年12月14日 09:06:29   作者:TGITCIC  
系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,你有一条新的微信消息,这种都是使用BroadCast机制去实现的。BroadCast分为静态和动态BroadCast两种,本文就来聊聊动态BroadCast的使用,需要的可以参考一下

BroadCast是什么

BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,你有一条新的微信消息。。。这种都是使用BroadCast机制去实现的。

BroadCast分为静态和动态BroadCast两种。它们的区别是:

  • 动态BroadCast是运行时发生的,它只有发生在APP运行后;
  • 那么有一种消息如:开机监听、全局监听、无activity承载弹窗在开机时APP没有运行前告知你天气要变化了这种消息,这种消息就是用的“静态BroadCast“;

我们今天先从动态BroadCast入手。从今天开始我们后面很多教程都涉及到有一样东西即:Android权限。

对于Android权限,这一块知识比较零碎。而且在不同的Android版本间还有巨大的差异。主要分为:

  • Android 6以前版本
  • Android 6-10
  • Android 10以后

每个sdk版本对权限的调用、配置还各不相同,我们就见招折招吧。

动态Broad Cast演示例子

今天我们来做的例子是一个在应用启动后如果网络信号发生断/连后及时广播相应的消息给到应用的Activity。如下图:

  • 在模拟器里用鼠标拖着屏幕的顶部黑框下一点然后按住鼠标不动往下拖动,就会出现一些“常用设置”。
  • 在设置里里对着网络信号开关作开/关操作
  • 你可以看到下方有浮动的Toast显示“网络状态发生改变”

围绕例子进行设计

1.我们写动态BroadCast,需要让一个Java类继承自:android.content.BroadcastReceiver;

2.覆写public void onReceive(Context context, Intent intent)方法,这个方法就是收到BroadCast后的处理逻辑所在了;

3.一定要记得把这个自己写的receiver注册到:AndroidManifest.xml文件中去。当然,你可以使用Android Studio的new->other->BroadCast Receiver来生成这个Receiver,它会自动帮你把这个Receiver的类注册到AndroidManifest.xml文件中去;

4.然后在Activity启动使IntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE")添加应用对网络状态监听情况;

来看全代码吧。

全代码

Receiver在AndroidManifest中的注册

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
 
    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.DemoDynamicBroadCast"
        tools:targetApi="31">
        <receiver
            android:name=".SimpleBroadCast"
            android:enabled="true"
            android:exported="true"></receiver>
 
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
 
            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
    </application>
 
</manifest>

Receiver-SimpleBroadCast

package org.mk.android.demo.broadcast;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
 
public class SimpleBroadCast extends BroadcastReceiver {
 
    private final static String TAG="DemoDynamicBroadCast";
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"网络状态发生改变~",Toast.LENGTH_SHORT).show();
        Log.i(TAG,">>>>>>网络状态发生改变");
    }
}

这个Receiver很简单,就是在onReceive方法中输出一个Toast。

再来看activity端。

MainActivity

package org.mk.android.demo.broadcast;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
public class MainActivity extends AppCompatActivity {
    SimpleBroadCast simpleBroadCast;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //核心部分代码:
        simpleBroadCast = new SimpleBroadCast();
        IntentFilter itFilter = new IntentFilter();
        itFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(simpleBroadCast, itFilter);
    }
    //别忘了将广播取消掉哦~
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(simpleBroadCast);
    }
}

运行后的效果

以下是运行后的效果

到此这篇关于Android入门之动态BroadCast的使用教程的文章就介绍到这了,更多相关Android动态BroadCast内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用WEB工具快速提高Android开发效率

    使用WEB工具快速提高Android开发效率

    正所谓工欲善其事,必先利其器。学习并应用优秀的轮子,可以让我们跑的更快,走的更远。这里所指的工具是广义的,泛指能帮助我们开发的东西,或者能提高我们效率的东西,包括:开发工具,监测工具,第三方代码库等
    2016-02-02
  • Android组件popupwindow使用方法详解

    Android组件popupwindow使用方法详解

    这篇文章主要为大家详细介绍了Android组件popupwindow使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android 动态改变布局实例详解

    Android 动态改变布局实例详解

    这篇文章主要介绍了Android 动态改变布局实例详解的相关资料,这里举例说明如何实现动态改变布局的例子,帮助大家学习理解,需要的朋友可以参考下
    2016-11-11
  • Android Mms之:PDU的使用详解

    Android Mms之:PDU的使用详解

    本篇文章是对PDU的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Android自定义控件实现万能的对话框

    Android自定义控件实现万能的对话框

    这篇文章主要为大家详细介绍了Android自定义控件实现万能对话框的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Adapter实现ListView带多选框等状态的自定义控件的注意事项

    Adapter实现ListView带多选框等状态的自定义控件的注意事项

    Android本身为ListView提供了几个方便的Adapter,比如ArrayAdapter、SimpleCurrentAdapter等等,接下来介绍自定义Adapter实现ListView带多选框等状态控件的注意事项,感兴趣的朋友可以详细了解下,或许对你有所帮助
    2013-01-01
  • Android几种多渠道打包的步骤详解

    Android几种多渠道打包的步骤详解

    在不同的应用市场可能有不同的统计需求,需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。这篇文章主要介绍了Android几种多渠道打包,需要的朋友可以参考下
    2019-09-09
  • WebView的几个常见功能使用方法

    WebView的几个常见功能使用方法

    本篇文章介绍了WebView的几个常见功能,WebView的功能很强大,感兴趣的小伙伴们可以了解一下。
    2016-11-11
  • Android仿微信群聊头像

    Android仿微信群聊头像

    这篇文章主要为大家介绍了Android仿微信群聊头像的相关资料,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • android 获取手机内存及 内存可用空间的方法

    android 获取手机内存及 内存可用空间的方法

    下面小编就为大家带来一篇android 获取手机内存及SD卡内存可用空间的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论