当前位置: 代码迷 >> Android >> Android开发从入门到精通(七) _4
  详细解决方案

Android开发从入门到精通(七) _4

热度:24   发布时间:2016-05-01 20:23:58.0
Android开发从入门到精通(7) _4

?

?在本节中你将会学到呼叫拨号盘时增加什么样的Intent。你还会学到在活动代码中的哪一个地方增加选择的Intent。另外,你将学习如何分析一个作为URI的电话号码。从拨号盘活动代码变成呼叫活动你需要更改一些代码。在本节中,你回去编辑AndroidPhoneDialer活动,在打开拨号盘后,来打一个电话。

????在活动中增加一个Intent,你还是需要Intent和Uri包装,所以,在AndroidPhoneDialer.java的文件头部保留这一部分。

import?android.content.Intent;?
import?android.net.Uri;

????这些包装将确保你不仅需要intent而且同样会传递需要的电话号码数据到Intent中(用Uri包装)。

提示

如果你不按照顺序匆匆看完这个章节,而且没有运作前一节实际的项目,那么就简单的创建一个新的项目,命名为AndroidPhoneDialer,然后增加前面提到的两个包装进去。这样会赶上进度。

????现在看看在本章早些时候表格7-1中可以使用的Activity?Action?Intents。你真正需要的是CALL_ACTION。很多的时候DIAL_ACTION打开Andriod拨号盘,CALL_ACTION将会启动电话的呼叫过程并且开始呼叫提供的号码。

????要创建Intent,使用和创建拨号盘同样的程序,只是这次使用CALL_ACTION:

Intent?CallIntent?=?new?
Intent(Intent.CALL_ACTION,Uri.parse("tel:5551212"));

请注意你使用Uri.parse来传递一个正确的电话号码到活动中。下一步是告诉Android你要把这个活动设为启动,并且启动它。使用下面的两行代码来实现:

CallIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH?);?
startActivity(CallIntent);

????在第一行,你发送启动旗帜到NEW_TASK_LAUNCH。这个会启动一个呼叫的新示例。最后,你告诉Android使用你的Intent启动活动。当结束时,你的AndroidPhoneDialer.java文件应当如下:

package?android_programmers_guide.AndroidPhoneDialer;?
import?android.app.Activity;?
Chapter?7:?Using?Intents?and?the?Phone?Dialer?129?
import?android.content.Intent;?
import?android.os.Bundle;?
import?android.net.Uri;?
public?class?AndroidPhoneDialer?extends?Activity?{?
/**?Called?when?the?Activity?is?first?created.?*/?
@Override?
public?void?onCreate(Bundle?icicle)?{?
super.onCreate(icicle);?
setContentView(R.layout.main);?
/**?Create?our?Intent?to?call?the?device's?Call?Activity?*/?
/**?Pass?the?Call?the?number?5551212?*/?
Intent?CallIntent?=?new?
Intent(Intent.CALL_ACTION,Uri.parse("tel:5551212"));?
/**?Use?NEW_TASK_LAUNCH?to?launch?the?Call?Activity?*/?
CallIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH?);?
/**?Finally?start?the?Activity?*/?
startActivity(CallIntent);?
}?
}?

编译这个应用程序并且观察结果,你应当看到如下类似的错误信息。我实际上有意的要你看看这个错误,因为它展示了我们还没有发现的Android的另一面,错误的文本如下:?

Application_Error:?
…?
Java.lang.SecurityException:?
Permission?Denial:?starting?Intent?


Android通过要求许可被执行来准许恰当的行动,在下一节叙述。

编辑活动许可

?

更多信息请查看?http://www.javady.com/index.php/category/thread

  相关解决方案