下面的程序的功能很简单,就是点击编辑通讯录按钮,然后跳转到通讯录编辑界面,但是我的运行结果总是出错,我怀疑是permission的问题,求高手解答,谢谢了MainActivity.javapackage zjftools.android.study;import android.app.*;
import android.os.*;
import android.view.*;
import android.content.*;
import android.widget.*;
import android.net.*;public class MainActivity extends Activity
{
private Button btnEdit;

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btnEdit = (Button) findViewById(R.id.btnEdit);
btnEdit.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_EDIT);
intent.setData(Uri.parse("content://contacts/people/1"));
startActivity(intent);
}
});
}
}
main.xml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="编辑通讯录"
        android:id="@+id/btnEdit" /></LinearLayout>
AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="zjftools.android.study"
    android:versionCode="1"
    android:versionName="1.0" >    <uses-sdk android:minSdkVersion="8" />    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".MainActivity"
            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></manifest>
点击编辑通讯录一开始弹出的窗口
然后弹出的错误窗口

解决方案 »

  1.   

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

  2.   


    正解完整的通讯录权限需要加入如下(只做参考):
         <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
        <uses-permission android:name="android.permission.READ_CONTACTS" />
        <uses-permission android:name="android.permission.WRITE_CONTACTS" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
        <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.mail" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS" />
        <uses-permission android:name="android.permission.USE_CREDENTIALS" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
        <uses-permission android:name="android.permission.CALL_PHONE" />
      

  3.   

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    加上这两个权限试试的
      

  4.   


    貌似加了那么多权限,效果还是一样,依旧出错,郁闷了AndroidManifest.xml是这么写的吧<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="zjftools.android.study"
        android:versionCode="1"
        android:versionName="1.0" >    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.CALL_PRIVILEGED" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.mail" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
    <uses-permission android:name="android.permission.CALL_PHONE" />    <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".MainActivity"
                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></manifest>
      

  5.   

    看到sqlite exception:no such column
    是你的数据库操作有问题吧
      

  6.   


    数据库操作不应该是系统做的事吗?我的程序应该只要负责调用Intent就可以了吧会不会还需要添加有关数据库权限的语句?
      

  7.   

    我的通讯录里面只有两条记录我试过Intent.ACTION_VIEW加setData(Uri.parse("content://contacts/people/1"))可以正常浏览通讯录第一个人的信息但是Intent.ACTION_EDIT加setData(Uri.parse("content://contacts/people/1"))一直出问题,感觉没道理啊
      

  8.   

    错误显示找不到raw_contact_id这个字段,应该是uri地址不对,查询只需要data_id就可以了,但是编辑联系人需要raw_contact_id
      

  9.   

    AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="zjftools.android.study"
        android:versionCode="1"
        android:versionName="1.0" >    <uses-sdk android:minSdkVersion="8" />    <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".MainActivity"
                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.READ_CONTACTS" /></manifest>
      

  10.   


    应该不是权限的问题了,2楼给了我这么多权限,还是运行出错也许12楼的观点是正确的,可能是uri有问题,不过貌似书上也是这么写的,难道书上写错了?
      

  11.   

    书上写的,也要看书上的系统版本是什么?自己用的SDK又是什么版本···,可能Google在后面的更新中会改变一些变量的名字,书上都是对的么?
      

  12.   

             Intent intent = new Intent();
                        intent.setAction(Intent.ACTION_EDIT);
                        intent.setData(Uri.parse("content://contacts/people/1"));
                        startActivity(intent);刚试了一下,可以哦,我是android4.1
      

  13.   

    http://developer.android.com/reference/android/provider/ContactsContract.html
    用这个来搞