Android程序员指南(23)



 7.2 使用拨号器

既然您已知道Intent是什么,现在是实践的时候了。这一节向您展示了如何使用Intent  DIAL_ACTION来打开一个电话拨号器。您将通过Intent传递一个电话号码。如果您的程序运行正常,您应该看到拨号器中显示中这个号码。

首先我们为这个Activity创建一个新的项目(参考第五章部分)。项目名为AndroidPhoneDialer。下图显示了New Android Project wizard中创建的过程及设置。

 

 

 

 在Eclipse中,打开工程,从main.xm移除包含Hello World语句的TextView部分。 修改后的main.xml看起来应像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
124 Android: A Programmer’s Guide
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
</LinearLayout>

您需要在您的项目中增加两个package一边利用DIAL_ACTION Intent,如下所示,第一个package允许您设置Intent,后一个用来解析URI。

import android.content.Intent;

import android.net.Uri;

注:这里您使用的DIAL_ACTION Intent有一些不同的Intent Filter,您可以用这个Filter将电话号码作为一个URI来传递。

下一步是创建您的Intent,语法如下:

Intent <intent_name> = new Intent(<Android_Intent>,<data>)

对您的程序来说,将第一个参数<intent_name>替换为DialIntent。为了获得第二个参数<Android_Intent>,需要引用了表7-1中的值。您可以找到,调用拨号器dialer,您需要使用DIAL_ACTION Intent。为了正确的调用这个Intent,还需要使用正确的DIAL_ACTION格式。最后一个参数<data>,是电话号码。DIAL_ACTION Intent将URI作为接收数据的格式。因此,您需要使用Uri.parse来解析您的电话号码。使用Uri.parse将确保DIAL_ACTION Intent可以理解您要拨的是什么号码。这里,我们以号码"tel:5551212"作为例子。

最后,您的项目中创建Intent的语句是这样的:

Intent DialIntent = new Intent(Intent.DIAL_ACTION,Uri.parse("tel:5551212"));

注:您使用了符号tel:<phone_number>标识拨指定的电话号码。您还可以使用voicemail: 来表示拨打的是语音信箱号码。

Intent创建好了以后,您要告诉Android,您想在一个新的Activity中运行dialer。为了实现这个目的,您需要使用Intent的方法setLaunchFlags( ) 。您必须传递给适当的参数给setLaunchFlags( ) ,下面的列表是您可以设置的运行参数标识(Launch Flag):

注:在一些情况下,有更多的标识可以被设置以完成需要的功能。

● NO_HISTORY_LAUNCH 启动Activity,但不把它记录在系统的运行历史(launch history)中

● SINGLE_TOP_LAUNCH 告诉系统,如果Activity已经运行则不再启动它

● NEW_TASK_LAUNCH 启动Activity

● MULTIPLE_TASK_LAUNCH 启动Activity,无论它是否已经运行

● FORWARD_RESULT_LAUNCH 允许新的Activity从已存在的Activity接受一些结果

这个例子中,您使用NEW_TASK_LAUNCH,就好,这样您便简单地打开了一个dialer Activity的实例。

DialIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH );

最后一步是让您的dialer Intent实际运行Activity。(更精确的说明,您要告诉Android您打算将dialer作为一个新的任务运行,也就是Dialer Activity)。您需要使用startActivity( ):

 startActivity(DialIntent);

注意您将您的intent传给了startActivity( )。这个Intent接着会被传给Android,于是这个动作被执行。AndroidPhoneDialer.java的完整代码如下:

package android_programmers_guide.AndroidPhoneDialer;
import android.app.Activity;
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 Dialer */
/** Pass the Dialer the number 5551212 */
Intent DialIntent = new
Intent(Intent.DIAL_ACTION,Uri.parse("tel:5551212"));
/** Use NEW_TASK_LAUNCH to launch the Dialer Activity */
DialIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH );
/** Finally start the Activity */
startActivity(DialIntent);
}
}

译者注:在新版本的SDK中,Intent.DIAL_ACTION应为Intent.ACTION_DIAL,Intent.NEW_TASK_LAUNCH应为Intent.FLAG_ACTIVITY_NEW_TASK。这两句应修改如下:

Intent DialIntent = new Intent(Intent.ACTION_DIAL,Uri.parse("tel:13057598022"));  
        DialIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

现在请编译AndroidPhoneDialer并在Emulator运行。前几章中我们已讨论过编译和运行的问题,您应已了解这个过程。.一旦您运行了程序,Emulator应启动,在漫长的启动过程之噢后,您的Activity将运行起来。您应看到下面的界面:

 

注:让Emulator保持运行是个好主意,即使您已经结束了您的Activity。 大多数人本能地在调试完自己的程序后便关闭了Emulator窗口。但是,让Emulator一直开着可以解决两个重要的问题。一个是Emulator的启动过于漫长,让它一直运行则避免了等待的时间。另一个问题是,我注意到有几次当我做了些小的改动后就无法将程序复制到Emulator上,将Emulator开着,这类问题出现得次数就相当少了。如果您一直有这个问题,请将userdata-qemu.img文件从您的计算机上删除,Emulator随后会建立一个新的干净的镜像。

就像您所看到的,您已经可以打开一个电话拨号器的Activity了,而拨号器上显示的电话号码正是您传入的,5551212。使用Emulator,点击Send按键,电话开始呼叫555-1212——当然这是虚拟的。显示拨号Activity的用途仅限于您想创建一个应用程序,允许用户可以在呼叫之前编辑号码。如果您想直接在程序里发起呼叫,该怎么做了?下一节我将给出答案。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值