Android学习笔记(4)调用系统函数与Intent,打电话的例子

注意:资料估计是在SDK1.5以前的,有一些参数请参照官方的最新文档,如下文中会提到DIAL_ACTION,我试了一下在2.2中是ACTION_DIAL。其他一些也会有相应的修改,如:setLaunchFlags这个函数并不需要再调用,但是文中大多数提到的是基本概念问题,不影响!

这一节中会做一个如何拨打和接收电话的例子,此外还会出现一个非常重要的概念,intents

前面的例子中已将可以创建一个“静态”的应用程序,然而这些没有什么实际应用的意义。接下来是调用平台的一些函数来实现打电话的功能!

什么是Intents?

在开始这个应用程序之前,必段先明白接下来会用到的一些东西,Intents。当你能够熟练掌握Intents之后,一个全新的程序开发的世界将向你敞开!(Once you master the use of Intents, a whole new world of application development will be open to you

Android的函数通过Intent将一些信息从一个Activity传递到另一个。Intent就是告诉一个Activity该做什么,你可以理解成一个在两个Activity之间传递的消息。比如:假设你有一个Activity需要打开Web浏览器并显示一个页面。你的Activity会发送一个“在Web浏览器上打开xxx网页”的消息。比较常见的有WEB_SEARCH_ACTION Intent,当这个Intent被发送后,被Android Intent解析器收到,解析器会解析出一个Activity的列表,并选择一个与你所传送的Intent最匹配的一个。在这个例子中就是Web浏览器Activity,接下来由Web浏览器根据你Intent中的内容做相应的操作。

Activity Action Intents:  Intents用来调用你应用程序之外的Activity,并且只能调用一个Activity,如调用Web浏览器

Broadcast Intents:   顾名思义了,这个可以调用你应用程序之外的很多Activity,比如手机电量值,广播一个Intents,任何一个Activity都会做出相应的反应,在电量低的情况下,可以退出一个Activity

以下列出一个可以使用的Activity Action Intents及相应的描述,可以看出的是,基本上一个Intents描述了一项功能!

Activity Action Intent         Message

ADD_SHORTCUT_ACTION                 Add a function shortcut to the Android Home Screen

ALL_APPS_ACTION                     List all the applications available on the device

ANSWER_ACTION                       Answer an incoming call

BUG_REPORT_ACTION                   Open the Bug Reporting Activity

CALL_ACTION                         Place a call to supplied location

DELETE_ACTION                       Delete the specified data

DIAL_ACTION                         Open the Dial Activity and dial the specified number

EDIT_ACTION                         Provide editable access to the supplied data

EMERGENCY_DIAL_ACTION               Dial an emergency number

FACTORY_TEST_ACTION                 Retrieve factory test settings

GET_CONTENT_ACTION                  Select and return specified data

INSERT_ACTION                       Insert an empty item

注:上面列出的只是一小部分,并且因参考资料的陈旧与SDK不断的更新,实际请参考最新的官方文档!当然还有Broadcast Intents请参考官方文档!

在接下来的例子中会用到两个IntentsCALL_ACTIONDIAL_ACTION,这两个Intents用作拨号与呼叫的功能!

Broadcast Intents中,有一些发送非常的频繁,比如TIME_TICK_ACTIONSIGNAL_STRENGTH_CHANGED_ACTION,小心使用他们。

一个Intent只有一个功能实现的三分之一,Intent是告诉Activity做什么,但是Intent并不会真正的去执行这些东西,他只是一个消息,还需要Intent FilterIntent Receivers去侦听,然后解析这个IntentIntent FilterIntent Receivers比较容易理解,如果把Intent比作邮件信息,那么需要一个投放的“邮箱”,这个是Intent Receivers

理解了什么是Intents,接下来学习如何使用DIAL_ACTION Intent来拨号。如前面的介绍一样,新建一个项目,建完新项目之后,第一件要做的事是把TextView删掉,把该清理的清理掉。然后,在你的项目中需要新引入两个包:android.content.Intentandroid.net.Uri。第一个是创建Intent,第二个是解析URI的。接下来一步是创建一个Intent,

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

Intent_name是Intent的名字,取一个就行了,Android_Intent需要查Activity Action Intent这个表,这里是DIAL_ACTION Intent,格式是:Intent.DIAL_ACTION,最后一个参数data是电话号码,他是URI,需要如下转换Uri.parse("tel:7788250")。

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

注意:Uri不是URI

TIP:可以用voicemail:替换tel:

Intent创建完之后,现在要告诉Android开启一个新的Activity去拨号。你可以用Intent setLaunchFlags()方法,必须给setLaunchFlags()方法一个适当的参数。以下是一些可供选择的参数:

NO_HISTORY_LAUNCH,启动一个Activity不记录在系统启动记录中。

SINGLE_TOP_LAUNCH,告诉系统不要启动这个Acitivity如果他已经在运行中了。

NEW_TASK_LAUNCH,新启动一个Activity

MULTIPLE_TASK_LAUNCH,不管有没有启动,都启动一个新的

FORWARD_RESULT_LAUNCH如果这个标记被设置。 而且被一个已经存在的 activity 用来启动新的 activity,已有 activity 的回复目标 (reply target) 会被转移给新的 activity

(注:FORWARD_RESULT_LAUNCH解释来源于互联网。)

在这个例子中,简单的使用一下NEW_TASK_LAUNCH吧。

DialIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH );

最后一步是用这个Intent实实在在的启动这个Activity

startActivity(DialIntent);

完整的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);

}

}

接下来可以编译,并在模拟器上运行了:

 

 

 

阶段性结束一下吧,以上只是一个拨号的过程,还需要CALL的过程,然后这中会关系到一些权限的问题,接下来是按钮自已再个性化一下。工作太忙,以后再写了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值