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

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

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

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

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

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

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

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

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

由于你已经添加了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。你的模拟器现在应该可以拨号了,如下所示:

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

你创建的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如下所示.

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

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

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

 

你可能感兴趣的:(eclipse,编程,android,xml,项目管理)