Android隐式意图

这篇具有很好参考价值的文章主要介绍了Android隐式意图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

所有Android应用都由一个或多个活动组成,另外还包括其他一些组件如布局。活动是用户可以完成的一个确定的事情。使用意图可以启动其他应用中的活动。其过程就是第一个活动向Android传递一个意图,Android检查这个意图,然后Android要求第二个活动启动。
可以创建一个意图来启动另一个活动,尽管这个活动在另一个应用中。
现在的问题是怎么知道用户设备上有哪些活动?怎么知道哪些活动适合我们要完成的任务?怎么知道如何使用这些活动?

创建意图
所有这些问题都可以使用动作action来解决

Intent intent = new Intent(Intent.ACTION_SEND);

以上是创建意图来指定一个动作的语法,Android提供了很多可用的标准动作:
Intent.ACTION_DIAL拨号,Intent.ACTION_WEB_SEARCH完成web搜索,Intent.ACTION_SEND发送消息…

增加额外的消息
一旦指定了想要使用的动作,还可以为它增加额外的信息。我们希望随意传递一些文本,这些文本将构成我们要发送的消息的消息体。为此可以使用以下代码给意图:

intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, messageText);
//这些属性是Intent.ACTION_SEND的特有属性。并不是所有动作都有这个属性

这里的messageText是你想发送的文本。这就告诉Android你希望这个活动能处理MIME数据类型为“text/plain”的数据,另外还会告诉它要发送的文本是什么。
另外如果还想增加其他额外信息,还可以另外再调用putExtra()方法。例如,如果你想指定消息的主题,可以使用以下代码来设置:

intent.putExtra(Intent.EXTRA_SUBJECT, subject);

这里的subject是消息的主题。
修改上一节的CreateMessageActivity.java文件

package com.hfad.mymessenger;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

//确保继承了Activity类
public class CreateMessageActivity extends Activity {
	@override
	//创建活动时会调用onCreate()方法
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_create_message);
	}
	
	//单击按钮时会调用这个方法
	public void onSendMessage(View view){
		//从ID为message的可编辑文本域得到文本
		EditText messageView = (EditText)findViewById(R.id.message);
		String messageText = messageView.getText().toString();

		//不再创建一个显式意图指定ReceiveMessageActivity
		//这里创建了一个使用发送动作的隐式意图
		Intent intent = new Intent(Intent.ACTION_SEND);
		intent.setType("text/plain");
		intent.putExtra(Intent.EXTRA_TEXT, messageText);

		//启动意图中指定的活动
		startActivity(intent);
	}
}

发生了什么
1、调用onSendMessage()方法时,会创建一个意图。startActivity()方法将这个意图传给Android。这个意图指定了动作ACTION_SEND,MIME类型为text/plain。
2、Android了解到这个意图只能传递到能处理ACTION_SEND和text/plain数据的活动。Android检查用户设备上的所有活动,查找能接收这个意图的活动。(如果没有活动能处理这个意图,会抛出一个ActivityNotException)
3、如果只有一个活动能接收这个意图,Android会让这个活动启动并传入意图。
如果有多个活动都能接收这个意图,Android会显示一个活动选择器对话框,让用户选择要使用的活动
4、用户选择他想要的活动后,Android让这个活动启动,并向这个活动传入意图,这个活动会在新消息中显示意图中包含的额外文本。

意图过滤器
为Android提供一个意图时,它必须明确哪个活动或哪些活动能处理这个意图。这个过程称为意图解析
使用隐式意图时,Android使用意图中的信息来确定哪些组件能接收这个意图。为此,它要检查每个应用AndroidManifest.xml中的意图过滤器。
意图过滤器指出各个组件可以接收哪些类型的意图。
举个例子,下面的记录对应一个可以处理ACTION_SEND动作的活动。这个活动能接收MIME类型为text/plain或image的数据。文章来源地址https://www.toymoban.com/news/detail-434459.html

<activity android:name="ShareActivity">
	<intent-filter>
		<!--这会告诉Android这个活动可以处理ACTION_SEND -->
		<action android:name="android.intent.action.SEND" />
		<!--意图处理器必须包含类别default,否则无法接收隐式意图 -->
		<category android:name="android.intent.category.DEFAULT" />
		<!--下面是这个活动能处理的数据类型 -->
		<data android:mimeType="text/plain" />
		<data android:mimeType="image/*" />
	</intent-filter>
</activity>

到了这里,关于Android隐式意图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity游戏嵌入Android应用(融合为一个应用)

    嵌入项目的AndroidStudio版本和Unity版本 Unity2019 AndroidStudio2021 01 新建一个新的安卓项目 项目里新建一个button 实现button的点击事件进入游戏 unity导出android工程 导出的工程文件夹放入原生的安卓项目 放入如下代码 放入如下代码 放入如下代码 项目里添加UnityGameActivity.java 需要配置

    2023年04月08日
    浏览(34)
  • 零样本文本分类应用:基于UTC的医疗意图多分类,打通数据标注-模型训练-模型调优-预测部署全流程。

    本项目提供基于通用文本分类 UTC(Universal Text Classification) 模型微调的文本分类端到端应用方案,打通 数据标注-模型训练-模型调优-预测部署全流程 ,可快速实现文本分类产品落地。 文本分类是一种重要的自然语言处理任务,它可以帮助我们将大量的文本数据进行有效的分

    2023年04月21日
    浏览(41)
  • 一个灵活、现代的Android应用架构

    学习Android架构的原则:学习原则,不要盲目遵循规则。 本文旨在通过示例演示实际应用:通过示范Android架构来进行教学。最重要的是,这意味着展示出如何做出各种架构决策。在某些情况下,我们会遇到几个可能的答案,而在每种情况下,我们都会依靠原则而不是机械地记

    2024年02月15日
    浏览(39)
  • 构建你的第一个Android应用

    一、Android的核心组件 Android是一种基于Linux的开源操作系统,主要用于移动设备,如智能手机和平板电脑。Android的设计目标是为用户提供一个统一、灵活和丰富的用户体验,同时保持开放性和兼容性。 Android的核心组件 包括: 应用程序框架:提供了一套用于开发和运行应用程

    2024年02月01日
    浏览(51)
  • 【React Native】第一个Android应用

    Windows -- Android 你可以使用任何编辑器来开发应用(编写 js 代码),但你仍然必须安装 Android Studio 来获得编译 Android 应用所需的工具和环境 Node 版本请保持在: NodeJs 16.0 请下载 Java SE Development Kit (JDK): JDK \\\\\\\\ 安装完 NodeJs 请尽量切换 npm 镜像源 \\\\\\\\ 或使用科学上网工具 \\\\

    2024年02月03日
    浏览(42)
  • 在一个真实的设备上调试Android应用

    由于模拟器只包含很少的应用,可能只有一个处理某个动作的应用。为了更好地测试我们的应用,需要在一个真实的设备上运行这个应用。 可以按一下步骤在一个真实设备上运行你的应用。 1、启动设备上的USB调试选项 在你的安卓设备上,打开 开发者选项 。一般情况下,要

    2024年02月02日
    浏览(70)
  • 开发一个Android应用:从零到一的实践指南

    在这篇博文中,我们将逐步探讨如何从头开始构建一个Android应用。我们将从最基本的环境搭建开始,然后深入讨论组件、布局和其他核心概念。在完成整个过程后,你将会掌握一个简单但完整的Android应用开发流程。让我们开始吧! 准备开发环境 创建项目 理解项目结构 设计

    2024年02月08日
    浏览(84)
  • 【Flutter】使用Android Studio 创建第一个flutter应用。

    首先下载好 flutter sdk和 Android Studio。 FlutterSDK下载 Android Studio官网 我的是 windows。 查看flutter安装环境。 如果没有,自己在环境变量的path添加下flutter安装路径。 在将 Path 变量更新后,打开一个新的控制台窗口,然后执行下面的命令。如果它提示有任何的平台相关依赖,那么

    2024年02月10日
    浏览(61)
  • 如何在 Android 应用中使用 RecyclerView 实现一个列表显示,并实现点击事件?

    首先,需要在项目的 build.gradle 文件中添加 RecyclerView 的依赖: 接下来,在布局文件中添加 RecyclerView: 接着,需要创建一个 Adapter 类,用于将数据绑定到 RecyclerView 上,如下所示: 在 onBindViewHolder() 方法中,我们可以将数据绑定到 ViewHolder 中的视图上。 需要注意的是,在 V

    2024年02月05日
    浏览(49)
  • android 12.0 屏蔽系统所有通知

    在12.0的产品开发中最近公司项目要求 屏蔽系统所有通知 不需要在下拉状态栏显示通知功能实现 要控制系统通知的开关功能,需要屏蔽系统通知,而系统通知都是由NoticationManagerServices.java来管理的, 这个NMS服务管理通知就需要在NotificationManagerService.java 来实现需求 在系统中,

    2024年02月06日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包