`
liuguofeng
  • 浏览: 456118 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android开发之旅: Intents和Intent Filters(实例部分)

 
阅读更多

引言

上篇我们介绍了Intents和Intent Filters的理论部分,主要是介绍了:activitiesservicesbroadcast receivers三种组件的Intent机制两种Intent(显式和隐式)及它们如何去匹配目的组件、Intent对象包含哪些信息、Intent Filters的action & category & data。

Intent的重要性,我不再着重介绍了,但我还是要说:Intent能够使应用程序突破沙盒与外界交流,者这使得Android的世界变得丰富多彩!本篇将用实例来介绍,如何应用Intent,而且继续用SMS方面的例子来阐述。本文的主要内容如下:

  • 例子(需求)描述
  • STEP1、添加用于显示通讯录的布局文件
  • STEP2、添加Button的点击事件
  • STEP3、添加通讯录活动
  • STEP4、解析通讯录返回的数据
  • STEP5、在清单文件AndroidManifest.xml中注册通讯录活动和读取Contact数据库的权限
  • 总结

例子(需求)描述

用手机发过SMS的人都知道:

  • 用户可以先编辑短信,然后再去通讯录中选择相应的人并发生给他。
  • 用户可以在短信内容中插入通讯录中联系人的号码。

我们的这个例子就是要说明如何实现这个功能。要实现这个功能,即是创建一个新的Activity选择(ACTION_PICK)通讯录中的数据,它会显示通讯录中的所有联系人并让用户选择,然后关闭并返回一个联系人的URI给短信程序。下面介绍如何一步一步实现类似的功能,而且是在之前Android 开发之旅:短信的收发及在android模拟器之间实践(一)中发送SMS的例子(TextMessage)基础上加上从通讯录中选择联系人的功能。

STEP1、添加用于显示通讯录的布局文件

我们用一个ListView来显示整个通讯录,其中用TextView显示每一记录。它们的xml文件分别为contact.xml、listitemlayout,如下所示:

====================================contact.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"

>

<ListView android:id="@+id/contactListView"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    />

</LinearLayout>

=================================== listitemlayout

<?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">

    <TextView android:id="@+id/itemTextView" android:layout_width="wrap_content"

    android:layout_height="wrap_content" android:padding="10px"

    android:textSize="16px" android:textColor="#FFF" />

</LinearLayout>

为了能够打开通讯录,我们还需要在TextMessage程序中加入一个Button btnContact,通过点击btnContact激活显示通讯录的活动。这只需在main.xml文件中加入如下代码:

    <Button android:layout_width="wrap_content"

        android:layout_height="wrap_content" android:text="@string/btnContact"

 

        android:id="@+id/btnContact"
       />

 

记得还有在values/strings.xml中相应的加入<string name="btnContact">contact</string>

STEP2、添加Button的点击事件

在上面准备工作做完之后,我们需要监听btnContact的点击事件,当用户点击btnContact时,跳转显示通讯录界面,当用户选择一个联系人之后,返回SMS程序的主界面。这里就要用到了伟大的Intent啦

btnContact = (Button) findViewById(R.id.btnContact);

btnContact.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

        // TODO Auto-generated method stub

        Intent intent = new Intent(Intent.ACTION_PICK,

                ContactsContract.Contacts.CONTENT_URI);

        startActivityForResult(intent, PICK_CONTACT);

    }

 

});

STEP3、添加通讯录活动

添加一个类文件,类名为ContactPick(表示通讯录活动名)继承Activity。它的主要功能就是获取从SMS主程序传递来的Intent并提取数据;然后去查询通讯录数据库,取出数据并填充到STEP1中定义的ListView;最后,还需要添加当用户选择一个联系人的事件onItemClick,将结果返回给SMS主程序,这里也用到了我们伟大的Intent!代码如下:

package skynet.com.cnblogs.www;

 

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.provider.ContactsContract;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ListView;

import android.widget.SimpleCursorAdapter;

import android.widget.AdapterView.OnItemClickListener;

 

public class ContactPick extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

 

        Intent orgIntent=getIntent();

        Uri queryUri=orgIntent.getData();        

        final Cursor c = managedQuery(queryUri,

                null,

                null,

                null,

                null);

        

        String[] fromColumns=new String[]{ContactsContract.Contacts.DISPLAY_NAME};

        int[] toLayoutIDs = new int[] { R.id.itemTextView };

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,

                R.layout.listitemlayout, c, fromColumns, toLayoutIDs);

        ListView lv = (ListView) findViewById(R.id.contactListView);

        lv.setAdapter(adapter);

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override

            public void onItemClick(AdapterView<?> parent, View view, int pos,

                    long id) {

                c.moveToPosition(pos);    

                int rowId = c.getInt(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

                Uri outURI = Uri.parse(ContactsContract.Contacts.CONTENT_URI.toString() + rowId);

                Intent outData = new Intent();

                outData.setData(outURI);

                setResult(Activity.RESULT_OK,outData);

                finish();

            }

        });

    }

}

为了您的安全,请只打开来源可靠的网址

打开网站    取消

来自: http://hi.baidu.com/friendofsnowandsea/blog/item/f7aa605131c1c9481138c24a.html
分享到:
评论

相关推荐

    Android开发之旅 Intents和Intent Filters(实例部分)(免费)

    ### Android开发之旅:深入理解Intents与Intent Filters 在Android开发中,`Intents`与`Intent Filters`是实现组件间通信的关键技术。通过这两项技术,开发者可以让应用程序中的不同组件,甚至不同的应用程序之间...

    Android开发之旅 Intents和Intent Filters(理论部分)(免费)

    ### Android开发之旅:深入理解Intents与Intent Filters 在Android应用开发中,Intents与Intent Filters扮演着极其关键的角色,它们使得应用间的通信成为可能,从而打破了应用沙盒的隔离状态,实现了应用间的互动与...

    Android开发之旅

    Android开发之旅:环境搭建及HelloWorld 1 Android开发之旅:HelloWorld项目的目录结构 2 Android开发之旅:android架构 3 Android开发之旅:应用程序...Android开发之旅 Intents和Intent Filters(实例部分) 17

    Android系列教程之十二:Intents and Intent Filters(三).docx

    总之,Intent和Intent Filters是Android系统的核心组成部分,它们使得不同应用间的交互变得简单而灵活。通过正确配置Intent Filter,开发者可以让自己的应用能够响应特定的Intent,从而实现各种功能,如拨打电话、...

    Android开发入门与实战+和第二版部分章节+第二版源代码

    本书主要内容为:Android开发环境搭建、Android SDK介绍、Android应用程序结构剖析,并对Android 中最重要的组件Activity、Intents&Intent Filters&Broadcast receivers、Intent、Service、Content Providers进行了...

    Google.Android.SDK开发范例大全

    8. **Intents and Intent Filters**:Android应用间的通信机制,允许启动活动、发送广播和处理数据共享。 9. **Notifications**:Android的通知系统,用于向用户展示应用的重要信息。 10. **Services**:后台运行...

    Android 开发指南中文版

    #### 八、意图和意图过滤器 - Intents and Intent Filters - **意图过滤器(Intent filters)**: 用于声明组件能够响应哪些类型的Intent。 - **通常情况(Common cases)**: 包括启动Activity、启动Service等常见场景。...

    android 中文开发指南

    #### 十、意图和意图过滤器(Intents and Intent Filters) `Intent`是Android中一种非常重要的机制,它用于启动其他组件或在组件间传递数据。通过使用`Intent`,开发者可以让组件之间互相发现和交互。 ##### 意图...

    Android开发指南中文版-----应用程序框架

    #### 十三、意图和意图过滤器(Intents and Intent Filters) 意图(Intent)用于在组件之间传递消息和数据,而意图过滤器(Intent Filters)则用于定义组件对哪些类型的Intent感兴趣。 #### 十四、数据存储(Data Storage...

    Footprint.and.Performance.Optimization

    - **Android开发—Intents和Intent filters实例.doc**:Intent是Android应用间通信的关键,正确使用能提高效率并减少资源浪费。 - **Android开发—Android UI设计技巧.doc**:UI设计直接影响性能和用户体验,如使用...

    Android编程指南(中文)

    #### 五、意图和意图过滤器 - Intents and Intent Filters **1. 意图过滤器 - Intent Filters** - **意图过滤器**: Intent 过滤器定义了组件可以响应哪些 Intent 类型。这是通过在 AndroidManifest.xml 文件中声明...

Global site tag (gtag.js) - Google Analytics