android学习(五) 向另一个应用发送用户 Intent
来源:互联网 发布:多线程并发 数据共享 编辑:程序博客网 时间:2024/05/18 14:23
构建隐含Intent
隐含 Intent 不声明要启动的组件的类名称,而是声明要执行的操作。 该操作指定您要执行的操作,比如查看、编辑、发送或 获取 某项。 Intent 通常还包含与操作关联的数据,比如您要查看的地址或您要发送的电子邮件消息。根据要创建的 Intent,数据可能是 Uri、多种其他数据类型之一,或 Intent 可能根本就不需要数据。
如果数据是Uri,可以使用一个简单的Intent()构造函数来定义操作和数据。
例如,此处显示如何使用指定电话号码的 Uri 数据创建发起电话呼叫的 Intent:
Uri number = Uri.parse("tel:12341234");Intent callIntent = new Intent(Intent.ACTION_DIAL,number);startActivity(callIntent);
这里有一些其他 Intent 及其操作和 Uri 数据对:
查看地图:
//基于地址的地图点Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");//基于图的点或纬度/经度.位置= 。Uri.parse("geo:37.422219,-122.08364?z=14"); // z 是一个缩放参数水平Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
查看网页
Uri webpage = Uri.parse("http://www.android.com");Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
其他类型的隐含 Intent 需要提供不同数据类型(比如,字符串)的“额外”数据。 您可以使用各种 putExtra() 方法添加一条或多条 extra 数据。
默认情况下,系统基于所包含的 Uri 数据确定 Intent 需要的相应 MIME 类型。如果您未在 Intent 中包含 Uri,您通常应使用 setType() 指定与 Intent 关联的数据的类型。 设置 MIME 类型可进一步指定哪些类型的 Activity 应接收 Intent。
发送带附件的电子邮件
Intent emailIntent = new Intent(Intent.ACTION_SEND);//这个Intent没有URI所以声明"text/plain"MIME类型emailIntent.setType("text/plain");emailIntent.putExtra(Intent.EXTRA_EMAIL,new String[]{"xxx@xxx.com"});emailIntent.putExtra(Intent.EXTRA_SUBJECT,"email subject");emailIntent.putExtra(Intent.EXTRA_TEXT,"Email message test");emailIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("content://path/to/email/attachment"))
创建日历事件
Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30);Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30);calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());calendarIntent.putExtra(Events.TITLE, "Ninja class");calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
注:只有API 级别 14 或更高级别支持此日历事件 Intent。
注:尽可能具体地定义您的 Intent 非常重要。例如,如果您想要使用 ACTION_VIEW Intent 显示图像,您应指定 MIME 类型 image/*。这可防止可“查看”数据的其他类型的应用(比如地图应用)被 Intent 触发。
验证是否存在接收Intent的应用
尽管 Android 平台保证某些 Intent 可以分解为内置应用之一(比如,“电话”、“电子邮件”或“日历”应用),您应在调用 Intent 之前始终包含确认步骤
注意:如果您调用了 Intent,但设备上没有可用于处理 Intent 的应用,您的应用将崩溃。
要确认是否存在可响应 Intent 的可用 Activity,请调用 queryIntentActivities() 来获取能够处理您的 Intent 的 Activity 列表。如果返回的 List 不为空,您可以安全地使用该 Intent。例如:
PackageManager packageManager = getPackageManager();List activities = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);//如果 isIntentSafe 是 true,则至少有一个应用将响应该 Intent。 如果它是 false,则没有任何应用处理该 Intent。boolean isIntentSafe = activities.size() > 0;
注:在您需要在用户尝试使用它之前停用使用该 Intent 的功能时,您应在 Activity 初次启动时执行此检查。
启动具有Intent的Activity
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);PackageManager packageManager = getPackageManager();List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);boolean isIntentSafe = activities.size() > 0;// 如果安全就启动activityif (isIntentSafe) { startActivity(mapIntent);}
显示应用选择器
//标题String title = getResources().getString(R.string.chooser_title);//创建应用选择器Intent chooser = Intent.createChooser(intent, title);if (intent.resolveActivity(getPackageManager()) != null) { startActivity(chooser);}
这将显示一个对话框,其中包含响应传递给 createChooser() 方法的 Intent 的应用列表,并且将提供的文本用作对话框标题。
摘自android developer
- android学习(五) 向另一个应用发送用户 Intent
- 向另一个应用发送用户
- Android Developers:向其它应用发送用户
- Android中通过intent启动另一个应用
- 向另一个应用程序发送键击
- android 应用组件[通用 Intent---添加日历事件] 五
- Android应用开发学习笔记之Intent
- Android学习之路---Intent应用示例
- Android应用核心Intent的学习
- linux向用户发送消息
- 利用intent打开另一个应用的功能
- Android学习路线(五)开启另一个Activity
- android 札记五 Intent
- Can I Use this Intent? Android中不要发送没有接收应用的Intent.
- 如何从android应用向MYsql服务器发送数据?
- android应用开发实践三----Atcity 通过Intent 来启动另一个Activity来实现简易拨号
- Android入门学习笔记(五):Activity与Intent
- Android启动另一个应用
- HDF5 使用介绍
- Linux使用update-alternatives进行软件版本切换
- C# 等分线段
- 从零开始学算法(一)排序算法(桶排序、冒泡排序、快速排序)
- 计算机网络复习(第五章 运输层)
- android学习(五) 向另一个应用发送用户 Intent
- 返回顶部 jQuery+css实现
- iOS 蓝牙开发 app作为外设被连接的实现(三)
- 百度音乐api接口
- 关于事件分发的一些认识
- BootStrap3.X模态框垂直居中显示
- MQTT V3.1--我的理解
- leetcode 371
- NBUT1597:Find MaxXorSum(字典树)