`
wc0903
  • 浏览: 81911 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

第七章 使用Intents与Phone Dialer——中

阅读更多

为给你的Activity分配正确的权限,你首先需要知道你需要分配什么权限。正确的例子是使用Dialer Activity。访问Dailer ActivityCALL_PHONE权限所管理。通过分配权限,Android可以让你的Intent启动Dialer Activity

如何给Activity添加权限?你需要编辑ActivityManifest。如果使用Eclipse的话,双击AndroidManifest.xml。这会打开Manifest预览窗口,如下所示:

要编辑Android的权限,点击Permissions链接,会把你带到Android Manifest Permissions窗口,如下所示:

该窗口列出了你当前为Activity分配的权限。假设你在新项目中工作,你不需要分配权限。因此,点击Add 按钮开始流程。在打开的对话框中,选择Uses Permission并点击OK

回到Android Manifest Permissions窗口,在Name下拉列表中,选择android.permission.CALL_PHONE,如下所示。这就将CALL_PHONE权限添加到了你的Activity中。

由于你已经添加了CALL_PHONE权限。看一下AndroidManifest.xml文件。它应该类似如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android=http://schemas.android.com/apk/res/android

package="android_programmers_guide.AndroidPhoneDialer">

<application android:icon="@drawable/icon">

<activity android:name=".AndroidPhoneDialer"

android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

<uses-permission android:name="android.permission.CALL_PHONE">

</uses-permission>

</manifest>

最有意思的那行在文件的最后:

<uses-permission android:name="android.permission.CALL_PHONE">

</uses-permission>

这一行是由EclipseAndroid插件添加的。如果你想要亲自干,你可以直接编辑AndroidManifest.xml文件来分配权限。然而,如果你不确定你要添加什么权限或者用什么语法添加,你可以使用Manifest的向导。

既然添加了权限,那就重编译你的恶Activity。你的模拟器现在应该可以拨号了,如下所示:

你创建的Activity用了一个Intent来启动设备的Call Activity并呼叫了555-1212号码。这演示了你可以如何方便的利用Intent。然而,这个应用离实际相差太远。也就是说,实际上会如何启动一个带有硬编码的电话号码的Activity,仅为了拨号?

下面的章节,你会更加具体地使用创建的应用,通过添加一个按钮,初始化CALL_ACTION Intent启动,和一个文本框,来使用户输入他们自己选择的电话号码。

修改AndroidPhoneDialer

本章为你演示,如何通过添加一些特性来更改你的AndroidPhoneDailer以是它更加具体一点。在本章结尾,你会很熟练的使用不仅仅是Intents,而且还有EditTextsButtons

 

添加按钮

本章为你展示如何更改你的项目以增加一个按钮。不是在Activity启动时启动Intent,而是通过按钮启动。除了文本之外,按钮也是应用中最普遍的对象类型。

按钮构成了用户和应用之间的交互。了解如何在Android中创建和利用按钮对创建一个实用的,友好的Activity来说非常重要。

你将在main.xml中创建按钮。回想一下第五章,里面我们为你的Hello WorldActivity创建了TextViewTextView有一个明显的结构,大概如此:

<View android:id=<id>

android:layout_width=<width>

android:layout_height=<height>

这种格式在视图中非常普通,而按钮也不例外。你用到的设置按钮的XML属性有 android:idandroid:layout_widthandtoid:layout_heightandroid:text。这四个XML属性有效的描述了你的按钮,所以你可以在你的Activity中使用它。

1. Assign to your Button the ID callButton:

android:id="@+id/callButton"

2. Set layout_width and layout_height to fill_parent and wrap_content, respectively:

android:layout_width="fill_parent"

android:layout_height="wrap_content"

3. Set the text of the Button to Show Dialer, which is descriptive enough to identify

what the Button will do:

android:text="Show Dialer"

完整的带属性的按钮XML,看起来像:

<Button android:id="@+id/callButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Show Dialer" />

看一下完成的main.xml文件。按钮出现在了内容中了,并等着你去对它编码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

<Button android:id="@+id/callButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Show Dialer" />

</LinearLayout>

为了开始给按钮添加功能,你需要给AndroidPhoneDailer.java添加其它的包。这个包含在按钮视图中的包是

android.widget.Button;

现在你已经将按钮部件导入到了你的项目中。

这为开始编码给你提供了必要的信息。你在项目中的编码应用会在你的Activity中输出一个按钮,当点击时,启动Call ActivityCall Activity应该启动带“tel:5551212”的数据。屏幕的结果会和你原先的AndroidPhoneDialer一样。

描述的功能包括一些不同的概念。首先,你必须使用main.xml中创建的按钮属性编写一个按钮。其次,你需要创建一个功能,从你上一个项目中调用CALL_ACTION Intent代码。最后,你的按钮需要能够执行这个功能,并启动Intent

创建按钮的属性是

final Button <button_name> = <button>

等号左侧在代码中创建了按钮。等号右侧是你从main.xml中调用按钮属性的地方。为了调用这些属性,你需要使用findViewById()并将结果类型限定为一个Button。这听起来要比实际上复杂。

记住,当你给main.xml添加一个按钮属性,你需要给按钮一个唯一的android:idcallButon,即被EclipseAndroid插件在id文件中所注册的R.id.callButton。通过传递id callButton使用findViewById()main.xml中取出按钮属性。

findViewById(R.id.callButton)

不要忘记给结果类型限定为Button

(Button) findViewById(R.id.callButton)

这个声明做成了等号的右侧部分。创建按钮的全部看起来像:

final Button callButton = (Button) findViewById(R.id.callButton);

现在你有了可用的按钮,但是你还需做些事情。这个按钮本身若无更多代码并不能做什么。如本例中,你需要让它执行CALL_ACTION Intent。因此你需要在你已存在的Intent call基础上创建一个小功能。当按钮被按下时会给你传递呼叫的内容。

这没啥大不了的,如果你熟悉Java编程的话。你需要安装onClick()方法,从前一节中调用Intent 代码。这个onClick()方法,将视图当做是一个参数。;然而,本项目中,onClick()本身并没有进行拨号:

public void onClick(View v){

Intent callIntent = new

Intent(Intent.CALL_ACTION,Uri.parse("tel:5551212"));

callIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH );

startActivity(callIntent);

}

应用剩下的最后一部分代码是绑定按钮和onClick的监听器。Java开发者应该熟悉监听器。对于那些不熟悉Java或监听器的人来说,监听器就是Java对象能监听其它对象的调用的方法。Android中的概念相同。你会在Android中创建监听器,让Android视图监听onClick方法。

对于该工程来说,你需要为你的按钮创建一个监听器,来监听来自Button ActivityonClick事件。当用户按下按钮,监听器就会调用onClick()方法。为了创建你所需的监听器,你要使用按钮的seOnClickListener()方法。

如果你熟悉Java开发,这种结构你不会陌生。这是Java中一个典型的onClickListener接口实现。你将看到的是利用Java匿名了类来执行ButtononClickListener事件。当然,作为匿名类,你也可以使用本地的变量——例如Button——如果变量定义为final.

setOnClickListener()方法带了一堆参数,第一个是个实例化的onClickListener()第二个是先前创建的onClick。你的setOnClickListener()看起来像:

callButton.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v){

Intent callIntent = new

Intent(Intent.CALL_ACTION,Uri.parse("tel:5551212"));

callIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH );

startActivity(callIntent);

}

});

这个代码段表名,当callButton被按下时,onClickListener会在onClick中执行代码。Onclick中的代码会执行CALL_ACTION Intent并呼叫电话555-1212.

你最终的AndroidPhoneDialer.java看起来像:

package android_programmers_guide.AndroidPhoneDialer;

import android.app.Activity;

import android.os.Bundle;

import android.widget.Button;

import android.view.View;

import android.content.Intent;

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 the Button */

final Button callButton = (Button) findViewById(R.id.callButton);

/** Set the onClickListener to call the onClick */

callButton.setOnClickListener(new Button.OnClickListener() {

/** Use the onClick to call the existing Intent code */

public void onClick(View v){

Intent callIntent = new

Intent(Intent.CALL_ACTION,Uri.parse("tel:5551212"));

callIntent.setLaunchFlags(Intent.NEW_TASK_LAUNCH );

startActivity(callIntent);

}

});

}

}

编译并在模拟器中运行该Activity。主Activity会显示一个名为Show Dialer的按钮。它会打开Call Activity并拨打555-1212.Activity如下所示.

如你所见,Android是一个非常稳健和灵活的平台。利用相对较少的代码行,少于一页,你就创建了基于设备上的手机硬件,并通过一个按钮启动的Activity。通过这一点,你也应该熟悉了Android处理ActivityIntentView的方式。

你的AndroidPhoneDialer Activity仍然不实用。你需要为它添加更多功能。本章的最后一节为你讲述如何利用EditText视图让你的用户输入电话号码。该号码会传递给CALL_ACTION Intent(而不是硬编码值tel:5551212)。

 

  • 大小: 34.4 KB
  • 大小: 16.4 KB
  • 大小: 28.1 KB
  • 大小: 24.4 KB
  • 大小: 21.8 KB
4
0
分享到:
评论
2 楼 wc0903 2010-03-25  
opqshuai 写道
"你会在Android中创建监听器,让Android视图兼通onClick方法。"这里的兼通应该是监听吧,呵呵,看了好久才明白。

呵呵,不好意思,打错字了。
1 楼 opqshuai 2010-03-23  
"你会在Android中创建监听器,让Android视图兼通onClick方法。"这里的兼通应该是监听吧,呵呵,看了好久才明白。

相关推荐

    android_8.1 Dialer源码

    7. **性能优化**:在Android 8.1中,Dialer针对内存管理、CPU使用和电量消耗进行了优化,以提升用户体验。 通过分析Dialer源码,开发者可以了解Android系统的通话框架,学习如何集成电话服务,处理来电、去电,以及...

    东软集团内部培训-Android编程指南

    第 1 章什么是 Android 第二章 下载和安装 ...第七章 使用 Intents 和电话拨号盘 第八章 列表,菜单和其它 Views 第九章 使用手机的 GPS 功能 . 第十章 使用 Google AP I 的 Gtak 第十一章 应用程序:找一个朋友

    安卓Android源码——项目中应用到的条码识别代码.zip

    在给定的"安卓Android源码——项目中应用到的条码识别代码.zip"压缩包中,包含了实现这一功能的相关代码和资源文件。以下将详细介绍其中可能包含的关键知识点。 首先,条码识别的核心是利用相机捕捉图像,并通过...

    Android程序员入门(中文高清版)

    #### 第七章 使用Intents和电话拨号盘 1. **Intents机制**: - **概念理解**:解释Intents的概念及其在Android中的作用。 - **发送短信**:演示如何使用Intent发送短信。 - **拨打电话**:展示如何通过Intent...

    Professional Android 2 Application Development [1e, 2010].pdf

    在第七章中,作者讲解了如何在Android应用中使用SQLite数据库,包括数据库的创建、查询、更新和删除操作。同时,还介绍了Content Provider的概念,它是Android四大组件之一,用于提供数据访问接口。 ### 第8章:...

    nlp肯定句与否定句判断

    项目中的“is_pos_answer_intents_classifies”可能是一个程序模块或者脚本,用于执行肯定句和否定句的分类。它可能包含了以下关键步骤: 1. **数据预处理**:这是任何NLP任务的第一步,通常包括分词、去除停用词、...

    深入理解Android Telephony原理剖析与最佳实践(带完整书签版).杨青平

    7. Intents与BroadcastReceiver:在Android中,电话事件通常通过Intent和BroadcastReceiver来传递。书中会讲解如何注册和使用BroadcastReceiver来监听电话相关的广播事件。 8. Permissions与安全:讨论与电话服务...

    Android编程指南+程序员入门(中文版).pdf

    第七章:使用Intents和电话拨号盘 - **Intent机制**:探讨如何利用Intent在不同组件间传递数据和请求服务,实现应用间的交互与通信。 - **电话拨号盘集成**:展示如何在应用中集成电话拨号功能,使用户能直接从...

    Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面.

    intent.putExtra(android.provider.ContactsContract.Intents.Insert.PHONE, tel); startActivity(intent); ``` 在上面的代码中,我们可以看到使用 Intent 跳转到系统应用中的不同界面,使用的 Action 和 Uri 是...

    Android A Programmer’s Guide.rar

    7 Using Intents and the Phone Dialer . . . 117 8 Lists, Menus, and Other Views . 149 9 Using the Cell Phone’s GPS Functionality . . 203 10 Using the Google API with GTalk . . . . 239 11 ...

    Pro Android 4 精通Android(英文版)

    - 第7章“Working with Menus”讨论了如何在Android应用中创建和使用菜单,菜单是提供用户选项的重要方式。 - 第8章“Fragments for Tablets and More”介绍了片段(Fragments)的概念,它们在平板电脑等大屏幕设备...

    Android 异步联系人备份与恢复Demo

    - 转换为VCard:将获取到的Cursor中的每一项联系人数据转化为VCard字符串,可以使用ContactsContract类的导出函数`ContactsContract.Intents.exportVCard()`或自定义实现。 - 写入文件:将VCard字符串写入到外部...

    Android 4.0开发教程 Apress

    第七章专注于Android应用中菜单的创建与管理,包括选项菜单、上下文菜单以及子菜单等。 8. 平板电脑和更多设备的Fragment 第八章探讨了Fragment在平板电脑和大屏幕设备中的应用,为这些设备提供更加灵活和模块化的...

    《android2 高级编程》 英文版 pdf

    8. **第7章:数据库与内容提供者**(Databases and Content Providers):重点介绍SQLite数据库的使用方法,以及如何通过Content Provider实现数据共享。 9. **第8章:地图、地理编码与基于位置的服务**(Maps, ...

    Android4高级编程(第3版)英文原版.pdf

    第七章:Files, Saving State, and Preferences 应用往往需要处理文件、保存应用状态以及用户偏好设置,本章将介绍如何使用文件输入输出、状态保存机制以及如何处理应用的配置信息。 第八章:Databases and Content...

    Android移动开发——个人理财通AS.zip

    【Android移动开发——个人理财通AS.zip】是一个关于Android应用开发的项目,主要目标是创建一个个人财务管理的应用程序。这个项目使用的是Eclipse IDE,它是一个广泛使用的Android开发工具,虽然现在更多的开发者...

    中文版Android程序员向导

    第七章“使用Intents 和电话拨号盘”深入到Android的核心机制之一——Intent,解释了Intent如何连接应用的不同组件,并展示了如何与系统服务(如拨号盘)进行交互。 第八章“列表,菜单和其它Views”介绍了Android ...

Global site tag (gtag.js) - Google Analytics