前一期学了Intent的前三个属性,这一期又学了剩下的四个属性和Android系统常用内置组件的启动。
四.数据和类型属性
数据属性通常用于为操作属性提供操作数据。数据属性接受一个Uri对象,该对象通常由以下形式的字符串表示:
内容://com . Android . contacts/contacts/1
电话:123
Uri字符串始终符合以下格式:
方案://主机:端口/路径
比如上面给出的内容://com.android.contacts/contacts/l,其中内容为方案部分,com . Android . contacts为主机部分,端口部分省略,/contacts/1为路径部分。
Type属性用于指定与Data属性指定的Uri相对应的MIME类型,可以是任何用户定义的MIME类型,只要它符合abc/xyz格式的字符串。
“数据”属性和“类型”属性之间的关系很微妙,这两个属性会相互覆盖,例如:
如果首先设置了“数据”属性,然后为“意图”设置了“类型”属性,则“类型”属性将覆盖“数据”属性。
如果首先设置“类型”属性,然后设置“意图”的“数据”属性,则“数据”属性将覆盖“类型”属性。
如果希望意图同时具有数据和类型属性,应该调用意图的setDataAndType()方法。
下面的示例演示了意图的“数据”属性和“类型”属性相互覆盖。这个例子的界面布局文件很简单,只定义了三个按钮,并且为这三个按钮绑定了事件处理。活动代码如下:
上述三种事件监视方法分别为“意图”设置了“数据”和“类型”属性。第一个事件监视方法首先设置类型属性,然后设置数据属性,这将导致数据属性覆盖类型属性。点击按钮激活事件监控方式,会看到如下图所示的提示信息。
从上图可以看出,此时的意图只有数据属性,覆盖了类型属性。
在第二个事件侦听方法中,首先设置数据属性,然后设置类型属性,这将导致类型属性重写数据属性。点击按钮激活事件监控方式,你会看到下图左侧显示的提示信息。
在第三种事件监听方法中,同时设置数据和类型属性,因此数据和类型属性在意图中都可用。点击按钮激活事件监控方式,会看到上图右侧的图所示提示信息。
在AndroidManifest.xml文件中,为组件声明的数据和类型属性是通过
& ltdataandroid:mimeType= " "
android:scheme= " "
android:host= " "
android:port= " "
android:path= " "
android:pathPrefix= " "
安卓:PathPattern = "/>;
上述
MimeType:用于声明此组件可以匹配的意向的类型属性。
方案:用于声明此组件可以匹配的意图的数据属性的方案部分。
主机:用于声明此组件可以匹配的意图的数据属性的主机部分。
端口:用于声明此组件可以匹配的意向数据属性的端口部分。
路径:用于声明此组件可以匹配的意图的数据属性的路径部分。
路径前缀:用于声明此组件可以匹配的意图的数据属性的路径前缀。
路径模式:一个路径字符串模板,用于声明该组件可以匹配的意图的数据属性。
意图的类型属性也用于指定意图的要求,它对应于
“意图”的“数据”属性略有不同。当程序员为意图指定数据属性时,数据属性的Uri对象实际上可以分为方案、主机、端口和路径。此时,该
“数据”属性的“匹配”过程存在一些差异,首先进行检查
如果
如果
如果
如果
如果
这里有两点需要注意:
如果
如果
一旦为意图指定了动作和数据属性,安卓就可以根据指定的数据类型启动特定的应用程序,并对指定的数据执行相应的操作。
以下是常见的数据属性:
电话://:数字数据格式,后跟电话号码。
Mailto://:邮件数据格式,后跟邮件收件人地址。
Smsto://:短信数据格式,后跟短信接收号码。
内容://:内容数据格式,后跟要读取的内容。
File://:文件数据格式,后跟文件路径。
市场://搜索?Q=pname:pkgname:市场数据格式,在Google Market中搜索一个名为pkgname的应用。
geo://经纬度:经纬度数据格式,显示地图上经纬度指定的位置。
动词 (verb的缩写)额外属性
意图的额外属性通常用于在多个动作之间交换数据。意图的额外属性值应该是一个捆绑对象,它就像一个映射对象,它可以存储多个键值对,以便通过意图在不同的活动之间交换数据。
接下来,了解系统内置的几个额外常数:
EXTRA_BCC:存储邮件秘密地址的字符串数组。
EXTRA_CC:用于存储邮件抄送地址的字符串数组。
EXTRA_EMAIL:用于存储电子邮件地址的字符串数组。
EXTRA_SUBJECT:存储邮件主题字符串。
存储邮件内容。
触发意图的键被存储为一个键事件对象。
EXTRA_PHONE_NUMBER:存储呼叫ACTION_CALL时的电话号码。
额外属性的使用将在学习活动数据传输时详细说明,因此这里不再介绍。
不及物动词标志属性
意图的标志属性用于为意图添加一些额外的控制标志,意图可以调用addFlags()方法来添加控制标志。实际上,在前面的活动任务堆栈和启动模式章节中已经简单提到过。
意图包含以下常见标志属性:
FLAG _ ACTIVITY _ BOUND _ TO _ FRONT:如果由该标志启动的活动已经存在,下次它再次启动时,它只会将该活动带到前台。比如现在活动栈中有活动A,那么活动B就以这个标志开始(即活动B以FLAG _ ACTIVITY _ BOUND _ TO _ FRONT标志开始),然后活动B中开始活动C和活动D,如果此时活动D中再次开始活动B,那么活动栈中的活动B就会直接被带到前台。此时,活动堆栈中的情况是活动a、c、d和B..
FLAG_ACTIVITY_CLEAR_TOP:该标志相当于加载模式下的单线任务,由该标志启动的活动将弹出活动堆栈中要启动的活动之上的所有活动。例如,活动堆栈包含四个活动:A、B、C和D。如果使用标志从活动D跳转到活动B,则活动堆栈只包含两个活动:A和B..
标志_活动_新_任务:默认开始标志,控制新活动的重新创建。
标志_活动_否_动画:该标志控制启动活动时不使用过渡动画。
标志_活动_否_历史:该标志控制启动的活动不会保留在活动堆栈中。例如,在活动堆栈中有三个活动a、b和c。此时,活动D以活动C中的该标志开始,活动D再次开始活动E。此时,活动堆栈中只有四个活动a、b、c和e,活动D不会保留在actvity堆栈中。
标志_活动_重新排序_到_前端:如果有活动,该标志控制将活动直接带到前台。例如,在活动堆栈中有四个活动a、b、c和d。如果用标志_ Activity _ reorder _ to _ front标志来启动Activity B,那么启动后Activity栈中的情况是a、c、d、B。
FLAG_ACTMTY_SINGLE_TOP:该标志相当于加载模式下的singleTop模式。例如,在原始的活动堆栈中,有四个活动a、b、c和d,当活动d再次启动时,活动框中仍有四个活动a、b、c和d。
安卓提供了大量的意图标志,每个标志都有自己特定的功能。详见关于意向的API文档,此处不做过多介绍。
七、启动安卓系统常用的内置组件
在实际开发中,不仅定制活动,安卓系统定义的活动也经常被调用。接下来,介绍了一些常见系统活动的调用方法。
1.打电话
如果您拨打移动客服10086,核心代码如下:
Uriuri=Uri.parse("电话:10086 ");
意向=新意向(意向。ACTION_DIAL,uri);
startActivity(意向);
2.发送短信
如果你发一条短信,内容是“你好”到10086,核心代码如下:
uri uri = Uri . parse(" smsto:10086 ");
意向=新意向(意向。ACTION_SENDTO,uri);
intent.putExtra("sms_body "," Hello ");
startActivity(意向);
3.发送彩信
相当于发送带附件的短信,核心代码如下:
意向=新意向(意向。ACTION _ SEND);
intent.putExtra("sms_body "," Hello ");
uri uri = Uri . parse(" content://media/external/images/media/23 ");
意图。输入额外的(意图。EXTRA_STREAM,uri);
intent . SetType(" image/png ");
startActivity(意向);
4.打开浏览器
如果打开百度主页,其核心代码如下:
uri uri = Uri . parse(" http://www . Baidu . com ");
意向=新意向(意向。ACTION_VIEW,uri);
startActivity(意向);
5.发送电子邮件
如果您向cqkxzsxy@163.com发送电子邮件,核心代码如下:
uri uri = Uri . parse(" mailto:cqkxzxy @ 163 . com ");
意向=新意向(意向。ACTION_SENDTO,uri);
startActivity(意向);
当然,电子邮件通常带有电子邮件内容。例如,带有“你好”的电子邮件被发送到cqkxzsxy@163.com。核心代码如下:
意向=新意向(意向。ACTION _ SEND);
意图。输入额外的(意图。EXTRA_EMAIL," cqkxzxy @ 163 . com ");
意图。输入额外的(意图。EXTRA_SUBJECT,“SUBJECT”);
意图。输入额外的(意图。EXTRA_TEXT,“Hello”);
intent . settype(" text/plain ");
startActivity(意向);
有时候需要给多人发邮件。核心代码如下:
意向=新意向(意向。ACTION _ SEND);
string[]tos = { " cqkxzxy @ 163 . com "," cqkxzxy @ 163 . com " };//收件人
String[]ccs={"852100303@qq.com "," 852100303 @ QQ . com " };//cc
String[]bccs={"test@abc.com "," test @ ABC . com " };//秘密发送
意图。输入额外的(意图。EXTRA_EMAIL,tos);
意图。输入额外的(意图。EXTRA_CC,CCS);
意图。输入额外的(意图。EXTRA_BCC,BCC);
意图。输入额外的(意图。EXTRA_SUBJECT,“SUBJECT”);
意图。输入额外的(意图。EXTRA_TEXT,“Hello”);
intent . SetType(" message/RFC 822 ");
startActivity(意向);
6.展示地图
如果打开中国北京(北纬39.9度,东经116.3度)的谷歌地图,其核心代码如下:
Uriuri=Uri.parse("geo:39.9,116.3 ");
意向=新意向(意向。ACTION_VIEW,uri);
startActivity(意向);
7.路径规划
比如从北京某处(北纬39.9度,东经116.3度)到上海某处(北纬31.2度,东经121.4度),其核心代码如下:
uri uri = Uri . parse(" http://maps . Google . com/maps?f=d&。saddr = 39.9 116.3 & ampdaddr = 31.2 121.4 ");
意向=新意向(意向。ACTION_VIEW,uri);
startActivity(意向);
8.多媒体播放
如果在SD卡中播放foo.mp3文件,其核心代码如下:
意向=新意向(意向。ACTION _ VIEW);
uri uri = Uri . parse(" file:///sdcard/foo . MP3 ");
intent.setDataAndType(uri," audio/MP3 ");
startActivity(意向);
如果你把SD卡下的音频文件都拿过来,然后播放第一个,核心代码如下:
uri uri = Uri . witheppendedpath(MediaStore。音频. Media.INTERNAL_CONTENT_URI,“1”);
意向=新意向(意向。ACTION_VIEW,uri);
startActivity(意向);
9.打开相机拍照
如果打开照片程序,其核心代码如下:
意图=新意图(MediaStore。ACTION _ IMAGE _ CAPTURE);
startActivityForResult(意图,0);
如果将照片数据取出,其核心代码如下:
bundleextras = intent . getextras();
Bitmapbitmap=(位图)extras . get(" data ");
如果调用系统摄像头应用程序并存储拍摄的照片,核心代码如下:
意图=新意图(MediaStore。ACTION _ IMAGE _ CAPTURE);
longtime=Calendar.getInstance()。getTimeInMillis();
intent.putExtra(MediaStore。EXTRA_OUTPUT,Uri.fromFile(newFile(环境
。getExternalStorageDirectory()。getAbsolutePath()+"/tucue ",time+"。jpg ")));
startActivityForResult(意图,ACTIVITY _ GET _ CAMERA _ IMAGE);
10.获取和剪切图片
如果获取并剪切图片,核心代码如下:
意向=新意向(意向。ACTION _ GET _ CONTENT);
intent . settype(" image/*);
intent.putExtra("crop "," true ");//打开切割
intent.putExtra("aspectX ",1);//剪切的宽高比为1: 2
intent.putExtra("aspectY ",2);
intent.putExtra("outputX ",20);//保存图片的宽度和高度
intent.putExtra("outputY ",40);
intent.putExtra("output ",Uri . FromFile(NewFile("/mnt/sdcard/temp "));//保存路径
intent.putExtra("outputFormat "," JPEG ");//返回格式
startActivityForResult(意图,0);
如果剪切一个特定的图片,核心代码如下:
intentintent = NewIntent(" com . Android . camera . action . CROP ");
intent . SetClassName(" com . Android . camera "," com . Android . camera . cropimage ");
intent . setdata(Uri . FromFile(NewFile("/mnt/sdcard/temp "));
intent.putExtra("outputX ",1);//剪切的宽高比为1: 2
intent.putExtra("outputY ",2);
intent.putExtra("aspectX ",20);//保存图片的宽度和高度
intent.putExtra("aspectY ",40);
intent.putExtra("scale ",true);
intent . putextra(" NoFaceDetection ",true);
intent.putExtra("output ",Uri . parse(" file:///mnt/sdcard/temp "));
startActivityForResult(意图,0);
11.打开谷歌市场
如果打开Google Market,直接进入程序的详细页面,其核心代码如下:
uri uri = Uri . parse(" market://details?id = "+" com . demo . app ");
意向=新意向(意向。ACTION_VIEW,uri);
startActivity(意向);
12.进入电话设置界面
如果进入无线网络设置界面,其核心代码如下:
intentintent = NewIntent(Android . provider . SETTINGS . action _ WIRELESS _ SETTINGS);
startActivityForResult(意图,0);
13.安装apk
安装apk的核心代码如下:
UriInstallURi = Uri . FromParts(" package "," xxx ",null);
意向=新意向(意向。ACTION_PACKAGE_ADDED,InstallURi);
startActivity(意向);
14.卸载apk
卸载apk的核心代码如下:
Uriuri=Uri.fromParts("package ",strPackageName,null);
意向=新意向(意向。ACTION_DELETE,uri);
startActivity(it);
15.发送附件
发送附件的核心代码如下:
意向=新意向(意向。ACTION _ SEND);
它. putExtra(意图。EXTRA_SUBJECT,“电子邮件主题文本”);
它. putExtra(意图。EXTRA_STREAM," file:///sdcard/eoe . MP3 ");
it.setType("音频/MP3 ");
开始活动(意图.创建选择器(它,“选择电子邮件客户端”));
16.进入联系人页面
进入联系人页面,核心代码如下:
intentintent = NewIntent();
意图。设置动作(意图。ACTION _ VIEW);
意图。设置数据(联系人。人. CONTENT _ URI);
startActivity(意向);
17.检查指定的联系人
检查指定联系人,核心代码如下:
uri personuri = content uri . with appended(People。CONTENT_URI,info . id);//信息。id联系人ID
intentintent = NewIntent();
意图。设置动作(意图。ACTION _ VIEW);
intent . setdata(personUri);
startActivity(意向);
18.呼叫系统编辑和添加联系人
呼叫系统编辑和添加联系人。核心代码如下:
意向=新意向(意向。ACTION _ INSERT _ OR _ EDIT);
意图。设置类型(人。CONTENT _ ITEM _ TYPE);
intent.putExtra(联系人。意图。插入。名称,“我的名字”);
intent.putExtra(联系人。Intents.Insert.PHONE,"+1234567890 ");
intent.putExtra(联系人。意图。插入。电话_类型,联系人。PhonesColumns . TYPE _ MOBILE);
intent.putExtra(联系人。Intents.Insert.EMAIL," cqkxzxy @ 163 . com ");
intent.putExtra(联系人。意图。插入。电子邮件_类型,联系人。ContactMethodsColumns . TYPE _ WORK);
startActivity(意向);
19.打开另一个程序
打开另一个程序,其核心代码如下:
intentintent = NewIntent();
ComponentNamecn = NewComponentname(" com . ibeifeng . test "," com . jiyu . cqkxzxy . Android . test . MainActivity ");
intent . SetComponent(cn);
intent . SetAction(" Android . intent . Action . MAIN ");
startActivityForResult(意图,结果_ OK);
20.打开录音机
打开记录仪,其核心代码如下:
Intentmi=newIntent(媒体。RECORD _ SOUND _ ACTION);
startActivity(mi);
这里总结了启用Android系统内置功能的常见核心代码,建议在具体使用上多加练习。
今天就到这里。如有疑问,请留言一起讨论。也欢迎你加入安卓零基础入门技术讨论组微信一起成长!
如果这一系列的分享对你有帮助,用手指去关注,去赞美,去留言。你的互动是对我最大的鼓励!
本文版权归微信微信官方账号分享专家-新Xi所有。如需转载,请联系作者授权,特此声明!
过去的总结和回顾:
第一部分:安卓的前世
第2部分:Android系统架构和应用组件
第三节:我们来谈谈Android开发环境
第4部分:正确安装和配置JDK
第5节:充分利用ADT捆绑包
第6部分:配置优化软件开发工具包管理器
第7部分:修复安卓模拟器
第八部分:地狱世界,第一次旅程的起点
第九节:安卓在实战,不知道代码也可以开发
第十节:开发IDE,欢迎Android Studio
第11节:运行Android Studio项目
第十二节:熟悉Android Studio界面
第十三节:Android Studio个性化配置
第14节:使用高速生成
第15节:掌握Android Studio项目结构
第16节:Android用户界面开发概述
第17节:文本框文本视图
第18节:输入框编辑文本
第19节:按钮按钮
第20节:选择控制复选框和单选按钮
第21节:切换控制按钮和开关
第22节:图像视图图像视图
第23部分:图像按钮和缩放按钮
第24节:自定义视图的简单使用
第25节:简单且最常用的线性布局
第26节:布局_重力与重力截然不同
第27节:填充和边距的正确使用
第28节:轻松掌握相对布局的相对布局
第29节:充分利用表格布局表格布局
第30节:两分钟掌握框架布局
第31节:很少使用的绝对视频
第32节:新网格布局网格布局
第33节:Android事件处理概述
第34节:基于安卓监听的事件处理
第35节:Android中基于回调的事件处理
第36节:安卓系统事件的处理
第37节:首次会议列表视图
第38节:第一次见面适配器
第39节:列表活动和自定义列表项目
第40节:定制数组适配器
第41节:使用简单适配器
第42节:定制基本适配器
第43部分:列表视图优化和列表端到端使用
第44节:列表视图数据的动态更新
第45节:GridView GridView
第46节:列表选项框微调器
第47节:自动完成文本查看自动文本
第48节:可扩展的列表视图多级选择
第49部分:AdapterViewFlipper照片转盘
第50节:堆叠查看卡堆叠
第51节:ProgressBar
第52节:自定义酷进度条
第53节:SeekBar和RatingBar
第54部分:视图切换,一个视图切换组件
第55节:图像切换器和文本切换器
第56节:翻转视图翻转器
第57节:日期选择器和时间选择器
第58节:数字选择器
第59节:三种常见的时钟组件
第60节:日历视图和计时器
第61节:滚动视图滚动视图
第62节:搜索框组件搜索视图
第63节:值得学习的TabHost
第64节:揭开再循环的真面目
第65节:回收新的分割线开发技能
第66节:回收新点击事件处理
第67节:回收查看数据动态更新
第68节:回收视图添加头端视图
第69节:可视寻呼机快速实施指南页面
第70节:视图页面创建跳转主机效果
第71节:卡片视图简单地实现了卡片布局
第72部分:SwipeRefreshLayout下拉刷新
第73节:活动创建和配置
第74节:活动启动和关闭
第75节:活动状态和生命周期
第76节:活动数据保存以及水平和垂直屏幕切换
第77节:活动任务堆栈和启动模式
第78节:四个组成部分的结合——意图
第79节:意图属性的详细说明(一)
1.《intent Android零基础入门|Intent 属性详解(下)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《intent Android零基础入门|Intent 属性详解(下)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/821831.html