Android学习 -- 《Intent app间通信》
来源:互联网 发布:青岛淘宝美工招聘信息 编辑:程序博客网 时间:2024/05/21 07:06
概述:
Android中的一个主要特性就是可以用 action 和 intent 使当前的app跳转到其他的app。
我们使用intent不止是可以在activity之间切换,还可以在不同app的activity之间切换
intent可以通过:
- 定义一个显式的intent制定需要启动组件的类名
- 定义一个隐式的inten来唤起不同的app
必须是隐式的才可以启动其他app
建立隐式(implicit)的intent
隐式的intent是不需要类名的,而是声明一个需要执行的 action,而这个action则指定了我们需要做的事情 : 查看,编辑,发送等,还可以 * 附带一些数据 *
从以下的三个例子可以看出:
Uri number = Uri.parse("tel:5551234"); Intent callIntent = new Intent(Intent.ACTION_DIAL, number); //第一个参数是action,dial是拨号的意思//这里就定义了一个带有电话号码的intent,用startactivity()调用这个callintent,就会拨打电话
Uri webpage = Uri.parse("http://www.android.com");Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage); // 这里的action就变成可view,因为这是一个查看网页的跳转
附带数据的情况
Intent emailIntent = new Intent(Intent.ACTION_SEND);// 在没有指定URi的情况下,比如要setType来指定intent附带的数据类型,如果是uri则系统会自动辨别emailIntent.setType(HTTP.PLAIN_TEXT_TYPE); // 类型为文本emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipientsemailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject"); // 使用putExtra()来添加数据第一个参数要注明数据类型是什么emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));// You can also attach multiple items by passing an ArrayList of Uris
验证是否有app接收
android系统会确保每一个intent都有接受它的app,包括电话短信等系统内置app,但是确保起见,我们在触发一个intent之前,要先验证是否有人接受这个intent
没有的话,不能触发,否则会crash
执行的方法:queryIntentActivities()
返回一个list,如果list为空,则不触发
PackageManager packageManager = getPackageManager();List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);boolean isIntentSafe = activities.size() > 0;
使用intent启动activity
这里出现了我们熟悉的一幕,就是点击分享之后出现了dialog,系统让用户选择用哪个app打开,如果只有一个app,系统会默认打开
接受Activity返回结果
发送了,我还要知道你收到了!
如果我们使用 startActivityForResult()
那么我们启动一个activity并接受一个返回的result 比如 : 启动联系人程序并获取其中的联系人详情
返回的result也是intent对象,我们用 onActivityResult()
这个回调方法来接收
//启动static final int PICK_CONTACT_REQUEST = 1; // The request code 是用于标识请求的,因为很可能不止一个...private void pickContact() { Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts")); pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);}//接收@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { // Check which request we're responding to if (requestCode == PICK_CONTACT_REQUEST) { // Make sure the request was successful if (resultCode == RESULT_OK) { // The user picked a contact. // The Intent's data Uri identifies which contact was selected. // Do something with the contact here (bigger example below) } }}
intent 过滤 | filter
所有app都因为做好被别的app启动的准备,那么如何做这样的准备呢?
这部分官网讲的很清楚,大家可以参考
link
0 0
- Android学习 -- 《Intent app间通信》
- Android中Activity间通信 -----intent & SharedPreferences
- Android 进程间通信-Intent、Messenger、AIDL
- Android Intent 通信
- Android组件通信--Intent
- Android通信组件Intent
- android intent 组件通信
- Android官方文档学习01多屏幕适配&Fragment间通信&Intent分享
- Android学习13--使用Intent和IntentFilter进行通信
- Android学习13--使用Intent和IntentFilter进行通信
- android.app.Activity.startActivity(Intent intent)
- Android的组件通信:intent
- Android 通信的桥梁 Intent
- Android实战技巧:组件间通信---Intent和IntentFilter
- Android 进程间通信 Intent机制 隐式启动Activity
- Android组件间通信--深入理解Intent与IntentFilter
- Android学习08Android应用程序组件之间的通信Intent和IntentFilter
- Android学习笔记--Intent
- 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
- Unix网络编程之名字与地址转化—gethostbyname
- fastImageCache解析:来自bang同学,非常棒!
- 关于要求一串数字不超过某个数字可以达到的最大和(DP背包问题)
- 操作系统c实现银行家算法
- Android学习 -- 《Intent app间通信》
- 乱码问题的整理 ps:补交昨天的作业
- 使用dtree构建框架导航
- VR开发 入门 使用Three.js 开发的WebVR demo
- ant分包环境搭建过程
- hibernate事务介绍
- MySQL的常用操作
- Sqlite数据库
- 在活动中不显示标题 --3