[学习笔记][移动平台程序开发]第六章 组建通信与广播消息

这篇博客详细介绍了Android中的Intent机制,包括Intent的作用、启动Activity的方式(显式与隐式)、如何获取Activity返回值,以及Intent过滤器的匹配规则。此外,还讲解了广播消息的使用,如系统广播和应用程序广播,以及它们在电池电量变化、网络状态等场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Intent简介

  Intent是一种轻量级的消息传递机制,有以下用途

  1. 用于组件之间的数据交换
    Activity、Service和BroadcastReceiver的数据交互
    启动Activity和Service
  2. 发送广播消息
    应用程序广播消息和系统广播消息(手机信号变化、电池电量变化)

启动Activity

应用程序一般都有多个Activity,Intent可以实现不同Activity之间的切换和数据传递

  • 启动Activity方式
    显式启动
      必须在Intent中指明启动的Activity所在的类
Intent intent =new Intent(MainActivity.this,Second.class);
startActivity(intent); 

隐式启动
  根据Intent的动作和数据来决定启动哪一个Activity,选择权由Android系统和最终用户来决定。选择隐式启动Activity,Android系统会在程序运行时解析Intent,并根据一定的规则对Intent和Activity进行匹配,使Intent上的动作、数据与Activity完全吻合。
  匹配的组件可以是程序本身的Activity,也可以是Android系统内置的Activity,还可以是第三方应用程序提供的Activity。

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
startActivity(intent); 

来源网络

获取Activity返回值

步骤如下:

1. 创建子Activity的xml文件;
2. 创建子Activity的java代码;
3. 在manifest文件中注册子Activity;
4. 在主Activity代码中启动子Activity;

int SUBACTIVITY1 = 1;
Intent intent = new Intent(this, SubActivity1.class);
startActivityForResult(intent, SUBACTIVITY1);

5. 设置子Activity的返回值;

Uri data = Uri.parse("tel:" + tel_number);
Intent result = new Intent(null, data);
result.putExtra("address", "JD Street");
setResult(RESULT_OK, result);
finish();

  setResult()函数有两个参数,“结果码”和“返回值”。结果码表明了子Activity的返回状态,通常为Activity.RESULT_OK(正常返回数据)或者Activity.RESULT_CANCELED(取消返回数据),也可以是自定义的结果码,结果码均为整数类型。
  返回值封装在Intent中,也就是说子Activity通过Intent将需要返回的数据传递给父Activity。数据主要以Uri形式返回给父Activity,此外还可以附加一些额外信息,这些额外信息用Extra的集合表示。

6. 在父Activity中获取返回值
  当子Activity关闭后,父Activity会调用onActivityResult()函数,获取子Activity的返回值。

public void onActivityResult(int requestCode, int resultCode, Intent data);

第1个参数requestCode是“请求码”,用来判断是哪一个子Activity的返回值
第2个参数resultCode用于表示子Activity的数据返回状态
第3个参数Data是子Activity的返回数据,返回数据类型是Intent(所以上例获取Uri需要:Uri uriData = data.getData();)

Intent过滤器

  Intent Filter,一种匹配机制,使Android系统能够根据Intent中的数据信息,找到需要启动的组件。
  根据Intent中的动作(Action)、类别(Category)和数据(Data)等内容,对适合接收该Intent的组件进行匹配和筛选,可以匹配数据类型、路径和协议,还可以确定多个匹配项顺序的优先级(Priority)。

	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<data android:scheme="schemodemo" android:host="edu.hrbeu" />
	</intent-filter>

来源网络
匹配规则:
(1) Android系统把所有应用程序包中的Intent过滤器集合在一起,形成一个完整的Intent过滤器列表
(2) 在Intent与Intent过滤器进行匹配时,Android系统会将列表中所有Intent过滤器的“动作”和“类别”与Intent进行匹配,任何不匹配的Intent过滤器都将被过滤掉。

广播消息

  应用程序和Android系统都可以使用Intent发送广播消息,广播消息的内容可以是与应用程序密切相关的数据信息,也可以是Android的系统信息,比如:

  • 网络连接变化
  • 电池电量变化
  • 接收到短信
  • 系统设置变化
String UNIQUE_STRING = "edu.hrbeu.BroadcastReceiverDemo";
Intent intent = new Intent(UNIQUE_STRING);
intent.putExtra("key1", "value1");
intent.putExtra("key2", "value2");
sendBroadcast(intent);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值