| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> BroadcastReceiver官方概览,android路由框架 -> 正文阅读 |
|
[网络协议]BroadcastReceiver官方概览,android路由框架 |
此外,以 Android 7.0 及更高版本为目标平台的应用必须使用? 接收广播 ==== 应用可以通过两种方式接收广播:清单声明的接收器和上下文注册的接收器。 清单声明的接收器 如果您在清单中声明广播接收器,系统会在广播发出后启动您的应用(如果应用尚未运行)。 注意:如果您的应用以 API 级别 26 或更高级别的平台版本为目标,则不能使用清单为隐式广播(没有明确针对您的应用的广播)声明接收器,但一些不受此限制的隐式广播除外。在大多数情况下,您可以使用调度作业来代替。 要在清单中声明广播接收器,请执行以下步骤: 1、在应用清单中指定? Intent 过滤器指定您的接收器所订阅的广播操作。 2、创建? public class MyBroadcastReceiver extends BroadcastReceiver { private static final String TAG = “MyBroadcastReceiver”; @Override public void onReceive(Context context, Intent intent) { StringBuilder sb = new StringBuilder(); sb.append("Action: " + intent.getAction() + “\n”); sb.append("URI: " + intent.toUri(Intent.URI_INTENT_SCHEME).toString() + “\n”); String log = sb.toString(); Log.d(TAG, log); Toast.makeText(context, log, Toast.LENGTH_LONG).show(); } } 系统软件包管理器会在应用安装时注册接收器。然后,该接收器会成为应用的一个独立入口点,这意味着如果应用当前未运行,系统可以启动应用并发送广播。 系统会创建新的? 上下文注册的接收器 要使用上下文注册接收器,请执行以下步骤: 1、创建? BroadcastReceiver br = new MyBroadcastReceiver(); 2、创建? IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); this.registerReceiver(br, filter); **注意:**要注册本地广播,请调用? 只要注册上下文有效,上下文注册的接收器就会接收广播。例如,如果您在? 3、要停止接收广播,请调用? 请注意注册和注销接收器的位置,比方说,如果您使用 Activity 上下文在? 对进程状态的影响 ========
但是,一旦从? 因此,您不应从广播接收器启动长时间运行的后台线程。 以下代码段展示了一个? public class MyBroadcastReceiver extends BroadcastReceiver { private static final String TAG = “MyBroadcastReceiver”; @Override public void onReceive(Context context, Intent intent) { final PendingResult pendingResult = goAsync(); Task asyncTask = new Task(pendingResult, intent); asyncTask.execute(); } private static class Task extends AsyncTask<String, Integer, String> { private final PendingResult pendingResult; private final Intent intent; private Task(PendingResult pendingResult, Intent intent) { this.pendingResult = pendingResult; this.intent = intent; } @Override protected String doInBackground(String… strings) { StringBuilder sb = new StringBuilder(); sb.append("Action: " + intent.getAction() + “\n”); sb.append("URI: " + intent.toUri(Intent.URI_INTENT_SCHEME).toString() + “\n”); String log = sb.toString(); Log.d(TAG, log); return log; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); // Must call finish() so the BroadcastReceiver can be recycled. pendingResult.finish(); } } } 发送广播 ==== Android 为应用提供三种方式来发送广播:
以下代码段展示了如何通过创建 Intent 并调用? Intent intent = new Intent(); intent.setAction(“com.example.broadcast.MY_NOTIFICATION”); intent.putExtra(“data”,“Notice me senpai!”); sendBroadcast(intent); 广播消息封装在? 注意:虽然 intent 既用于发送广播,也用于通过? 通过权限限制广播 ======== 您可以通过权限将广播限定到拥有特定权限的一组应用。您可以对广播的发送器或接收器施加限制。 带权限的发送 当您调用? sendBroadcast(new Intent(“com.example.NOTIFY”), Manifest.permission.SEND_SMS); 要接收此广播,接收方应用必须请求如下权限: 您可以指定现有的系统权限(如? **注意:**自定义权限将在安装应用时注册。定义自定义权限的应用必须在使用自定义权限的应用之前安装。 带权限的接收 如果您在注册广播接收器时指定了权限参数(通过?
),则广播方必须通过其清单中的? 例如,假设您的接收方应用具有如下所示的清单声明的接收器: <receiver android:name=".MyBroadcastReceiver" android:permission=“android.permission.SEND_SMS”> 或者您的接收方应用具有如下所示的上下文注册的接收器: IntentFilter filter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED); registerReceiver(receiver, filter, Manifest.permission.SEND_SMS, null ); 那么,发送方应用必须请求如下权限,才能向这些接收器发送广播: 安全注意事项和最佳做法 =========== 以下是有关收发广播的一些安全注意事项和最佳做法: |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 11:34:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |