Android系统中标准Intent的使用

一 Android系统用于Activity的标准Intent

1 根据联系人ID显示联系人信息

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_VIEW);   //显示联系人信息
		intent.setData(Uri.parse("content://contacts/people/492"));
		startActivity(intent);

2 根据联系人ID显示拨号面板

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_DIAL);  //显示拨号面板
		intent.setData(Uri.parse("content://contacts/people/492"));
		startActivity(intent);

3 显示拨号面板, 并在拨号面板上将号码显示出来

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_VIEW);
		intent.setData(Uri.parse("tel://15216448315"));
		startActivity(intent);

4 显示拨号面板, 并在拨号面板上将号码显示出来

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_DIAL);   //显示拨号面板, 并在拨号面板上将号码显示出来
		intent.setData(Uri.parse("tel://15216448315"));
		startActivity(intent);

5 根据联系人的ID编辑联系人

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_EDIT);   //编辑联系人
		intent.setData(Uri.parse("content://contacts/people/492"));
		startActivity(intent);

6 显示通讯录联系人和其他账号联系人的列表

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_VIEW);
		intent.setData(Uri.parse("content://contacts/people/"));
		startActivity(intent);

7 启动HomeScreen

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_MAIN);     //启动HomeScreen
		intent.addCategory(Intent.CATEGORY_HOME);
		startActivity(intent);

8 选择某个联系人的号码,返回一个代表这个号码的uri,如:content://contacts/phones/982

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_GET_CONTENT);
		intent.setType("vnd.android.cursor.item/phone");
		startActivityForResult(intent, 1);

9  打开多个应用选取各种类型的数据,以uri返回。返回的uri可使用ContentResolver.openInputStream(Uri)打开

该功能可用在邮件中附件的选取

举例如下:

选取一张图片, 返回的uri为 content://media/external/images/media/47

选取一首歌, 返回的uri为 content://media/external/audio/media/51

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_GET_CONTENT);
		intent.setType("*/*");
		intent.addCategory(Intent.CATEGORY_OPENABLE);
		startActivityForResult(intent, 2);

10 自定义一个chooser,不使用系统的chooser

该chooser可以有自己的标题(Title)

并且不必让用户指定偏好

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_CHOOSER);
		intent.putExtra(Intent.EXTRA_TITLE, "my chooser");
		intent.putExtra(Intent.EXTRA_INTENT,
				new Intent(Intent.ACTION_GET_CONTENT)
				.setType("*/*")
				.addCategory(Intent.CATEGORY_OPENABLE)
				);

		startActivityForResult(intent, 2);

11 选取activity,返回的activity可在返回的intent.getComponent()中得到

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_PICK_ACTIVITY);
		intent.putExtra( Intent.EXTRA_INTENT,
				new Intent(Intent.ACTION_GET_CONTENT)
				.setType("*/*")
				.addCategory(Intent.CATEGORY_OPENABLE)
				);
		startActivityForResult(intent, 3);

12 启动搜索,在以下示例代码中,"ANDROID"为要搜索的字符串

当执行这段代码后, 会在系统的Chooser中显示可以用于搜索的程序列表

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_SEARCH);     //启动搜索
		intent.putExtra(SearchManager.QUERY, "ANDROID");
		startActivity(intent);

13 启动WEB搜索,在以下示例代码中,"ANDROID"为要搜索的字符串

当执行这段代码后, 会在系统的Chooser中显示可以用于搜索的程序列表,一般情况下系统中安装的浏览器都会显示出来

Intent intent = new Intent();
		intent.setAction(Intent.ACTION_WEB_SEARCH);     //启动搜索
		intent.putExtra(SearchManager.QUERY, "ANDROID");
		startActivity(intent);

二  Android系统用于BroadcastReceiver的标准Intent

1 ACTION_TIME_TICK,系统时钟广播,系统每分钟都会发送一个这样的广播,

如果在应用开发中,有些逻辑依赖于系统时钟,可以注册一个广播接收者

这是一个受保护的action,只有系统才能发送这个广播

并且,在manifest文件中注册的广播接收者不能接收到该广播,若要接收该广播,必须在代码中注册广播接收者

registerReceiver(new BroadcastReceiver(){

			@Override
			public void onReceive(Context context, Intent intent) {
				Log.i("xxxx", "TIME_TICK");
			}

		},
		new IntentFilter(Intent.ACTION_TIME_TICK));

2 在官方文档中,列出了以下标准的广播action

三  Android中的标准类别(category)

类别(category)一般配合action使用,以下为系统中的标准类别,由于数量过多,只能在使用到时再详细研究

四  Android中的标准Extra键值

这些常量用于在调用Intent.putExtra(String, Bundle)时作为键值传递数据,同样由于数量较多,在此只列出索引

五  Intent中的标志(FLAG)

Intent类中定义了一些以FLAG_开头的标志位,这些标志位中有的非常重要,会影响app中Activity和BroadcastReceiver等的行为。

以下为这些标志位的索引,是从官方文档上的截图。之后会对重要的标志加以详细分析

时间: 2024-08-08 08:44:04

Android系统中标准Intent的使用的相关文章

Android系统中的广播(Broadcast)机制简要介绍和学习计划

在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制:这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用:本文通过一个简单的例子来学习Android系统的广播机制,为后续分析广播机制的源代码作准备. 在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式

自己动手清除Android系统中的不良程序

陈跃峰 2014/6/29 最近在使用我的Nexus7时,总是经常莫名其妙的弹出一些广告弹窗,还会自动下载一些应用程序,还会在桌面上生成一个叫做"精彩应用"的图标,这个快捷方式关联的程序显示的内容和广告内容是一致的,很是烦人,使用360手机卫士和乐安全都发现不了这个不良程序,所以就自己动手来清除这个程序. 由于Nexus 7平时用于测试程序,安装的应用很多,手动删除了一些可疑的应用以后还是不行,猜测是某些app可能被人篡改了,就不再去删除app了,而把目光转向了桌面快捷方式上. 既然生

Android 系统中,那些能大幅提高工作效率的 API 汇总(持续更新中...)

前言 "条条大路通罗马."工作中,实现某个需求的方式往往不是唯一的,这些不同实现方式不仅表现在代码质量上,还影响着我们的工作效率.就像,在 Android 系统中,总有那么一些鲜为人知的 API 能够减少我们很多零碎的工作量.于是,就想凭着一些经验,整理一些常用的,找个地方归纳总结,也供日后翻阅. getResources().getIdentifier(String name, String defType, String defPackage) 根据资源名称获取资源 id.正常情况

Android系统中添加一个产品----图文详解

本文本着开源的精神介绍如何向一个Android系统中添加一个产品的整个过程,按照以下过程笔者有理由相信每个将要从事本行业的人都可以完成,其实添加一个产品并不难,难的是对其相关硬件的修改,好了废话不多说. 首先我们要创建一个属于自己产品的目录,这里以WY_device为例,以WY作为产品的名字. 首先从已经存在的产品中拷贝一个以产品的名字为名的.mk文件,修改为自己的.mk文件,在这里为WY.mk 对其进行如下的修改: 然后添加AndroidProducts.mk  这是添加产品的配置文件名路径,

Android系统中的dp和px的转换

android系统中DP和SP的转化:1.首先分析TypedValue.java 可以调用以下代码获得dp的值 TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20,getResources().getDisplayMetrics()); public static float applyDimension(int unit, float value,DisplayMetrics metrics) { switch (unit) {

Android系统中设置TextView的行间距(非行高)

Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacingMultiplier. 关于Android下TextView中文换行问题,可查看Android自定义view-文本自动换行. 1.android:lineSpacingExtra设置行间距,如”3dp”. 2.android:lineSpacingMultiplier设置行间距的倍数,如”1.2″

向Android系统中添加模块及产品流程

 添加Android模块  一.基础知识: (1)在Android系统中,编译都是以模块(而不是文件)作为单位的,每个模块都有一个唯一的名称: (2)为了将模块编译到Android系统中,每个模块都需要一个专门的Make文件,也即是"Android.mk"文件: 二.实现hello.c 模块的编写  1. 如在 hardware/test目录下,编写hello.c 2. 在hardw/test目录下,编写Android.mk Android.mk编写的步骤: (1)设置当前模块的编译路

AIDL在android系统中的作用

AIDL,Android Interface definition language的缩写,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口.最近看了下AIDL在Android系统中的用法,在网上看到很多初学的朋友不太明白AIDL的实际作用,android提供了很多进程间通信的组件,像action.broadcast.contentprovide都可以实现进程间的通信,为什么还要用AIDL这个东西呢?我在android源码中实现了一个自己写的AIDL例子,用以

android系统中获取imei号 手机号码 imsi号码

原文:android系统中获取imei号 手机号码 imsi号码 源代码下载地址:http://www.zuidaima.com/share/1550463673584640.htm 一.获取IMEI号码 TelephonyManager telephonyManager=(TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); String imei=telephonyManager.getDeviceId();