Android隐式意图

 

原文: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().比如:


  1. Intent intent = new Intent(Intent.ACTION_GET_CONTENT);  
  2. intent.setType("audio/*");  
  3. startActivity(Intent.createChooser(intent, "Select music"));  

以上把intent传入createChooser()方法,从而显示了一个应用程序选择对话框,并将提供的文字作为对话框标题。

介于考虑到 读者可能不太形象了解  ,

Intent.createChooser 这个方法展示出来的页面如下:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值