访问android的联系人时发出问题

时间:2009-09-23 05:10:30

标签: java android

我是Android开发的新手。我正在尝试读取和写入android地址簿的联系人。

我尝试将以下代码行写入android

public class SecondApp extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

ContentValues values = new ContentValues();
values.put(Contacts.People.NAME, "Rishabh");
ContentResolver cr = getContentResolver();
Uri uri = cr.insert(People.CONTENT_URI, values); 

但我收到“应用程序意外停止。请再试一次”消息。

它有什么问题? 我如何访问android的联系人?


嗨MannyNS感谢您的回复 我已按照您的定义给予了写入权限。

但我仍然得到“应用程序已经意外停止。请再试一次”,即使我启动android它的消息“进程android.process media没有响应”。

你能建议我整个程序来读取和写入android的联系人吗? 你有任何示例代码吗?

由于 RISHABH

3 个答案:

答案 0 :(得分:1)

ViewContact.java: 注意:getContacts()是用户定义的函数

package com.android.ViewContact;

import android.app.Activity;
import android.os.Bundle;
import android.database.*;
import android.net.Uri;
import android.provider.ContactsContract;
import android.widget.TextView;

public class ViewContactAct extends Activity 
{

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView contactview=(TextView)findViewById(R.id.contactview);
        Cursor mycursor=getContacts();
        while(mycursor.moveToNext())
        {
            String displayname=mycursor.getString(mycursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
            contactview.append("Name: ");
            contactview.append(displayname);
            contactview.append("\n");

        }
    }

    private Cursor getContacts()
    {
    Uri myuri=ContactsContract.Contacts.CONTENT_URI;
    String[] projection=new String[]
                                   {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME 
                                   };

    String selection= ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
    + ("1") + "'";
    String[] selectionArgs = null;
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
    + " COLLATE LOCALIZED ASC";

    return managedQuery(myuri, projection, selection, selectionArgs,
    sortOrder);


    }

 }

答案 1 :(得分:0)

您缺少编写联系人的系统权限。 将此行添加到清单文件中:

<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

如果您的代码必须阅读联系人,您的应用程序将需要“android.permission.READ_CONTACTS”。

可以在Android reference pages上找到完整的权限标记。

答案 2 :(得分:0)

要阅读联系人,请使用以下代码:

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">
    <TextView android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:id="@+id/contactview" 
        />
</LinearLayout>

在清单文件中添加以下条目: <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

上面给出了显示联系簿中联系人姓名的java代码: