创建联系人列表并和联系人打电话应用程序

内容: 这个教程教我们怎么开发一个ListActivity应用, 联系人的列表装载到了基于List的View. 然后可以选择其中之一打电话.
目的: 可以非常容易的学会Intents和ListActivities的使用.

Main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. androidrientation="horizontal">
  6. <TextView
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="Name: "
  10. />
  11. <TextView
  12. android:id="@+id/row_entry"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. />
  16. </LinearLayout>
复制代码

AndroidManifest.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="zyf.CallME"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application
  7. android:label="@string/app_name"
  8. android:icon="@drawable/android">
  9. <activity
  10. android:name=".CallME"
  11. android:label="@string/app_name">
  12. <intent-filter>
  13. <action android:name="android.intent.action.MAIN" />
  14. <category android:name=
  15. "android.intent.category.LAUNCHER" />
  16. </intent-filter>
  17. </activity>
  18. </application>
  19. <uses-sdk android:minSdkVersion="2" />
  20. <uses-permission android:name="android.permission.READ_CONTACTS">
  21. </uses-permission>
  22. <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
  23. </manifest>
复制代码

Java

  1. package zyf.CallME;
  2. import android.app.ListActivity;
  3. import android.content.*;
  4. import android.database.Cursor;
  5. import android.os.Bundle;
  6. import android.provider.Contacts.People;
  7. import android.view.View;
  8. import android.widget.*;
  9. public class CallME extends ListActivity {
  10. private String[] name;
  11. private int[] to;
  12. private SimpleCursorAdapter sadapter;
  13. private Intent callIntent;
  14. private long PhoneID;
  15. @Override
  16. public void onCreate(Bundle icicle) {
  17. super.onCreate(icicle);
  18. try {
  19. Cursor c =
  20. getContentResolver().query(People.CONTENT_URI, null,
  21. null, null, null);
  22. startManagingCursor(c);
  23. name = new String[] { People.NAME };
  24. to = new int[] { R.id.row_entry };
  25. sadapter = new SimpleCursorAdapter(this,R.layout.main, c, name, to);
  26. this.setListAdapter(sadapter);
  27. } catch (Exception e) {
  28. Toast.makeText(this, "联系人读取错误",
  29. Toast.LENGTH_LONG).show();
  30. }
  31. }
  32. @Override
  33. protected void onListItemClick(ListView l,
  34. View v, int position, long id) {
  35. super.onListItemClick(l, v, position, id);
  36. callIntent=new Intent(Intent.ACTION_CALL);
  37. Cursor c=(Cursor)sadapter.getItem(position);
  38. PhoneID=c.getLong(c.getColumnIndex(People.PRIMARY_PHONE_ID));
  39. callIntent.setData(ContentUris.withAppendedId(android.provider.
  40. Contacts.Phones.CONTENT_URI, PhoneID));
  41. startActivity(callIntent);
  42. }
  43. }
复制代码

解析
1.在main.xml中添加两个TextView
用于显示"Name:"的静态标签

  1. <TextView
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:text="Name: "
  5. />
复制代码

用于动态添加并显示联系人的姓名内容的TextView

  1. <TextView
  2. android:id="@+id/row_entry"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. />
复制代码

2.修改LinearLayout的布局方向

  1. androidrientation="horizontal" //说明横向排布
复制代码

3.AndroidManifest.xml中说明使用权限

  1. <uses-permission
  2. android:name="android.permission.READ_CONTACTS"></uses-permission>
  3. //说明可以访问读取联系人信息
  4.  
  5. <uses-permission
  6. android:name="android.permission.CALL_PHONE"></uses-permission>
  7. //说明可以使用打电话功能
复制代码

4.Java代码中的读取联系人信息处理

  1. try {
  2. Cursor c =
  3. getContentResolver().query(People.CONTENT_URI, null,null, null, null);
  4. //Cursor,该接口提供从数据库提取信息返回结果中随机读写访问
  5. //ContentResolver 提供应用程序访问Content模型
  6. //ContentResolver.query()抽取给定的URI,返回一个在结果之上的Cursor
  7. startManagingCursor(c);
  8. //该方法允许Activity基于Activity的生命周期来为你处理管理给定的Cursor的生命周期
  9. name = new String[] { People.NAME };
  10. //新建用户名数组 People类用于列出联系人 People.NAME得到联系人姓名
  11.  
  12. to = new int[] { R.id.row_entry };
  13. //创建一个TextView引用数组 用来放置获取的 People.NAME
  14. sadapter = new SimpleCursorAdapter(this,R.layout.main, c, name, to);
  15. this.setListAdapter(sadapter);
  16. //创建一个简单的适配器从一个cursor指针到TextView或是ImageView的map专栏适配器。
  17. //构造方法(Context,layout,Cursor,from,to),第一参数是设备上下文,第二个参数是布局文件,第三个参数是指向联系人URI的Cursor指针,form代表来源的字符串(联系人名),to把联系人名放到的地方(TextView)
  18. } catch (Exception e) {
  19. Toast.makeText(this, "联系人读取错误",Toast.LENGTH_LONG).show();
  20. //Toast显示提示,不打扰用户。.show()用来显示Toast
  21. }
复制代码

5.Java代码中的点击事件处理(选择后电话联系该联系人)

  1. protected void onListItemClick(ListView l,View v, int position, long id) {
  2. // TODO Auto-generated method stub
  3. super.onListItemClick(l, v, position, id);
  4. callIntent=new Intent(Intent.ACTION_CALL);
  5. //创建一个带有Call动作的Intent
  6. Cursor c=(Cursor)sadapter.getItem(position);
  7. //通过选中的Items位置来获取相应的联系人指针 Cursor
  8. PhoneID=c.getLong(c.getColumnIndex(People.PRIMARY_PHONE_ID));
  9. //获取相应联系人电话号码
  10. //getLong()返回请求数据的一个长整型
  11. //为给定的列,返回基于0的索引值
  12. //People.PRIMARY_PHONE_ID 获取主键电话号码
  13. callIntent.setData(ContentUris.withAppendedId(android.provider.
  14. Contacts.Phones.CONTENT_URI, PhoneID));
  15. //为Intent设置操作的数据
  16. //ContentUris操作带有数据内容的Uri的实用方法、它们带有"Content"体制
  17. //withAppendedId()把给定的ID添加到path后面 第一个参数是开始的,后面参数是添加的
  18. startActivity(callIntent);
  19. //开启Intent
  20. }
复制代码

你可能感兴趣的:(android,version,应用程序,联系人,电话)