和其他App交互(1)发送用户到其他App界面
2015-01-05 09:38
253 查看
Android一个特别重要的特点就是可以基于一个“action”就能发送用户到其他app界面上。例如,如果你的应用程序有一个商务地址你想要显示在地图上,你不必要在你的app中构建一个展示地图的Activity。相反的,你可以使用一个Intent创建一个地址的展示请求。Android系统就会启动一个可以展示那个地址的地图的app了。我们必须使用Intent来导航切换app中不同的Activity。这个小章节用来展示如何为一个特定的动作创建一个隐式Intent,如何使用它来启动一个在其他app中完成动作的Activity。
构建一个隐式的Intent
隐式的Intent没有声明组件要启动的类名,但是相反的它声明的是一个要完成的动作。这个动作就是我们想要做的事,比如:视图展示,编辑,发送或者是获得某些东西。
下面是打电话:
展示地图:
发送Email:
验证一个接收Intent的App是否存在
如果我们调用一个Intent,但是手机设备中没有那个对应的App可以处理这个特定的Intent,我们的App就会崩溃
为了验证是否有可以响应intent的Activity存在,我们要调用queryIntentActivities()来获得一个可以处理Intent的集合。如果我们的集合返回是空的话,我们就可以安全的使用Intent 了。例如:
用Intent启动一个Activity
本例子是展示怎么创建一个展示地图的Intent,验证如果有处理Intent的App的话,就启动这个App
显示一个App选择器
有时候如果有很多的app都能处理那个Intent的话,就会显示出一个对话框,让我们选择要选用哪个作为默认的,以后就是使用那个默认的了。但是,如果我们想要用户每次都自己选择不同的App的话,可以定义一个选择器,它每次都是展现一个列表对话框,供用户选择。
构建一个隐式的Intent
隐式的Intent没有声明组件要启动的类名,但是相反的它声明的是一个要完成的动作。这个动作就是我们想要做的事,比如:视图展示,编辑,发送或者是获得某些东西。
下面是打电话:
Uri number = Uri.parse("tel:5551234"); Intent callIntent = new Intent(Intent.ACTION_DIAL, number);接着调用startActivity()即可。
展示地图:
// Map point based on address Uri 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 level Intent 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 type emailIntent.setType(HTTP.PLAIN_TEXT_TYPE); emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients emailIntent.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 intent Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, location); // Verify it resolves PackageManager packageManager = getPackageManager(); List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0); boolean isIntentSafe = activities.size() > 0; // Start an activity if it's safe if (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 chooser Intent chooser = Intent.createChooser(intent, title); startActivity(chooser);
相关文章推荐
- Android Training - 和其他程序交互(1) - 发送用户请求给另外一个程序
- 发送用户给其他APP
- Android - 和其他APP交互 - 把用户带到其他app
- linux 终端中向其他用户发送消息
- linux系统中通过控制台给其他用户发送消息
- linux 终端中向其他用户发送消息
- linux 终端中向其他用户发送消息
- linux 终端中向其他用户发送消息
- 软件产品基础设计初探(界面、用户交互与体验、基础功能、业务功能)
- linux 终端中向其他用户发送消息
- linux 终端中向其他用户发送消息
- linux 终端中向其他用户发送消息
- linux 终端中向其他用户发送消息
- linux 终端中向其他用户发送消息
- linux 终端中向其他用户发送消息
- Android 妙招解决App Widget用户交互
- Android小项目之--前台界面与用户交互的对接 进度条与拖动条(附源码)
- linux 终端中向其他用户发送消息
- linux 终端中向其他用户发送消息
- linux 终端中向其他用户发送消息