和其他App交互(1)发送用户到其他App界面
来源:互联网 发布:导师睡研究生知乎 编辑:程序博客网 时间:2024/05/20 22:28
Android一个特别重要的特点就是可以基于一个“action”就能发送用户到其他app界面上。例如,如果你的应用程序有一个商务地址你想要显示在地图上,你不必要在你的app中构建一个展示地图的Activity。相反的,你可以使用一个Intent创建一个地址的展示请求。Android系统就会启动一个可以展示那个地址的地图的app了。我们必须使用Intent来导航切换app中不同的Activity。这个小章节用来展示如何为一个特定的动作创建一个隐式Intent,如何使用它来启动一个在其他app中完成动作的Activity。
构建一个隐式的Intent
隐式的Intent没有声明组件要启动的类名,但是相反的它声明的是一个要完成的动作。这个动作就是我们想要做的事,比如:视图展示,编辑,发送或者是获得某些东西。
下面是打电话:
Uri number = Uri.parse("tel:5551234");Intent callIntent = new Intent(Intent.ACTION_DIAL, number);接着调用startActivity()即可。
展示地图:
// Map point based on addressUri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");// Or map point based on latitude/longitude// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom levelIntent mapIntent = new Intent(Intent.ACTION_VIEW, location);展示网页:
Uri webpage = Uri.parse("http://www.android.com");Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);最后都是要调用startActivity() 方法或者是startActivityForResult()
发送Email:
Intent emailIntent = new Intent(Intent.ACTION_SEND);// The intent does not have a URI, so declare the "text/plain" MIME typeemailIntent.setType(HTTP.PLAIN_TEXT_TYPE);emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipientsemailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");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创建一个日历事件:支持版本14以上
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");
验证一个接收Intent的App是否存在
如果我们调用一个Intent,但是手机设备中没有那个对应的App可以处理这个特定的Intent,我们的App就会崩溃
为了验证是否有可以响应intent的Activity存在,我们要调用queryIntentActivities()来获得一个可以处理Intent的集合。如果我们的集合返回是空的话,我们就可以安全的使用Intent 了。例如:
PackageManager packageManager = getPackageManager();List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);boolean isIntentSafe = activities.size() > 0;如果isIntentSafe值为true的话,至少会有一个App可以响应我们的Intent,如果是false的话,那么就不会有响应我们Intent的App了。
用Intent启动一个Activity
本例子是展示怎么创建一个展示地图的Intent,验证如果有处理Intent的App的话,就启动这个App
// Build the intentUri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);// Verify it resolvesPackageManager packageManager = getPackageManager();List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);boolean isIntentSafe = activities.size() > 0;// Start an activity if it's safeif (isIntentSafe) { startActivity(mapIntent);}
显示一个App选择器
有时候如果有很多的app都能处理那个Intent的话,就会显示出一个对话框,让我们选择要选用哪个作为默认的,以后就是使用那个默认的了。但是,如果我们想要用户每次都自己选择不同的App的话,可以定义一个选择器,它每次都是展现一个列表对话框,供用户选择。
Intent intent = new Intent(Intent.ACTION_SEND);...// Always use string resources for UI text.// This says something like "Share this photo with"String title = getResources().getString(R.string.chooser_title);// Create and start the chooserIntent chooser = Intent.createChooser(intent, title);startActivity(chooser);
- 和其他App交互(1)发送用户到其他App界面
- 发送用户给其他APP
- 和其他app进行交互
- 和其他App分享简单的数据(1)给其他App发送简单的数据
- 和其他App交互(3)允许其他App启动我们的Activity
- android和其他 App的交互
- 内容共享 之 发送内容到其他的APP
- Intent实现跳转到网页,其他app的界面
- Android 分享到其他app
- Android跳转到其他APP
- 【Android Training - 06】分享数据内容 [Lesson 1 - 发送分享的数据到其他App]
- 【Android Training - 06】分享数据内容 [Lesson 1 - 发送分享的数据到其他App]
- Android Training - 和其他程序交互(1) - 发送用户请求给另外一个程序
- 和其他App交互(2)从一个Activity中得到结果
- 和其他App分享文件(1)设置文件共享
- 从其他APP分享图片到自己的APP指定界面内
- Android 从app 携带参数 跳转到其他app的指定界面
- 先其他app发送简单数据
- squid配置-cache_peer和cache_peer_domain两种配置方式
- 盯盯工作APP是如何做到准点提醒你的 ——浅谈PHP的定时任务
- asp.net JSONHelper JSON帮助类
- Android 音乐播放器的开发教程(十二)SQLite的使用及我的最爱歌曲的实现 ----- 小达
- android webview加载H5页面丢失cookie信息的解决办法
- 和其他App交互(1)发送用户到其他App界面
- HTTP协议分析系列(六)------php+socket+cookie请求
- 小米桌面就是 Launcher3去掉主菜单
- Squid.conf配置文件详解
- 数组作为函数的参数和返回值
- Python 3 的新特性
- Thinking in React (组件拆分原理)
- 工作五年,你应该知道的事和一定会遇到的极品
- 对于UITableViewCell