原文:http://developer.android.com/intl/zh-CN/training/basics/intents/sending.html
http://www.iteye.com/topic/690376
这篇文章准确的说是 集百家之长,废话不多说,说说我眼中的隐士意图, 进来 看 任玉刚大神写的 书,第一章中就有隐式意图,于是详细了解了一番,发现大有乾坤
1.什么叫做隐式意图,字面意思,就是不是 按照我们正常跳activity方式跳转,比如,我想从我的app页面调到 我手机中的电话簿页面, 当然 我们可以用显示来跳,但是我们不知道电话簿页面的 activity 是哪个包下面的,但是 通过很多渠道 可以知道 电话页面的其他信息,比如:
以下是如何创建一个Intent来打电话,在这里我们用Uri数据来表示电话号码。
1 2 |
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
|
没错,我们可以通过 action。
尽管Android平台确保特定的intent会被解析到一个内建的应用程序(比如电话,短信,日历),你仍然需要在使用intent前进行一下确认。
小心: 如果你发起一个在设备上无法被任何应用程序处理的intent,那么你的程序就会崩溃。
为了确认有一个activity能响应该intent,可以使用queryIntentActivities()来获取一个能处理该intent的activity列表,如果返回的列表非空,那么你就可以安全的使用这个intent了。例如:
1 2 3 4 5 6 7 8 9 10 11 12 |
//创建intent
Uri location 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;
// 如果安全的话,启动一个activity
if (isIntentSafe) {
startActivity(mapIntent);
}
|
显示一个应用程序选择框
当你调用startActivity()来传递Intent,而且有多个应用程序区配该intent时,用户可以选择一个默认选项(通过选中对话框底的一个checkbox)。这对于一个用户通常想用一个固定程序的action(比如浏览网页和拍照)来说,是很好的,但是对于一个用户更愿意去每次选择不同应用程序来执行的action而言,你需要显式的弹出一个选择对话框,并强制用户每次使用都做出选择。(用户无法选择默认程序)。
图 2. 当你用 createChooser()来强制显示匹配你intent的应用列表时,弹出的选择对话框。
为了显示选择器,调用createChooser()创建一个intent,并将其传给startActivity().比如:
- Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
- intent.setType("audio/*");
- startActivity(Intent.createChooser(intent, "Select music"));
|
以上把intent传入createChooser()方法,从而显示了一个应用程序选择对话框,并将提供的文字作为对话框标题。
介于考虑到 读者可能不太形象了解 ,
Intent.createChooser 这个方法展示出来的页面如下:
![](https://img-blog.csdn.net/20161208223015394?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYXBwbGVfeGlhbmdzaXl1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)