Android 在尝试访问手机联系人时,未调用OnActivityResult

Android 在尝试访问手机联系人时,未调用OnActivityResult,android,android-intent,android-contacts,onactivityresult,Android,Android Intent,Android Contacts,Onactivityresult,在我的应用程序中,我想通过手机访问联系人,并用从联系人处获取的一些数据填写表格。当我尝试运行Intent时,我可以在手机中看到联系人列表,但它不会返回任何数据,并且不会调用onActivityResult。有人能帮我吗,因为我是android编程的初学者 以下是我的部分代码: “联系人”按钮的点击事件 btn_contacts.setOnClickListener(new View.OnClickListener() { @Override public voi

在我的应用程序中,我想通过手机访问联系人,并用从联系人处获取的一些数据填写表格。当我尝试运行Intent时,我可以在手机中看到联系人列表,但它不会返回任何数据,并且不会调用onActivityResult。有人能帮我吗,因为我是android编程的初学者

以下是我的部分代码:

“联系人”按钮的点击事件

btn_contacts.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            @SuppressWarnings("deprecation")
            Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_TYPE);                              
            startActivityForResult(intent, PICK_CONTACT);                   
        }
    });
In-OnActivity在同一活动中生成结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    Log.e("REcAddress","in activity result");   
    super.onActivityResult(requestCode, resultCode, data);
    if(data!=null){
        Log.e("REcAddress","hey");  
    }
    if(requestCode == PICK_CONTACT && resultCode == RESULT_OK){
        Uri contactData = data.getData();   
        Log.e("REcAddress",contactData.toString());
        Cursor c = getContentResolver().query(contactData, null, null, null, null);
        if(c.moveToFirst()){
            String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            Log.e("REcAddress",name);   
            edt_rec_name.setText(name);
        }
    }
}
我还附上了一张图片来展示活动的布局。我想在表格中尽可能多地填写联系人的详细信息。Logcat中也没有错误。请引导我


谢谢。

您可能没有访问手机联系人的权限。您是否正在使用中的

试试看

首先添加权限:

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

没有任何更改。由于某些原因,它转到上一个活动我尝试了许多方法和您提供的代码,但是没有调用onActivityResult,在我选择联系人时,它转到上一个活动。logcat中也没有。我的错是onPause()中有一个结束符…现在正在调用OnActvityResult,但我得到游标IndexOutOfBounds异常先计算游标,然后使用moveToNext调用数据。我也用这种方法更新了我的答案。必须添加if(c.moveToFirst())以避免例外情况。如何获取联系人的地址,如街道、邮政编码等?
 <uses-permission android:name="android.permission.READ_CONTACTS" />
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

private static int PICK_CONTACT = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button pick = (Button) findViewById(R.id.butpick);
    pick.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            pickContact();
        }
    });
}

private void pickContact() {
            //you have used CONTENT_TYPE and here should be  CONTENT_URI
    Intent intent = new Intent(Intent.ACTION_PICK,
            ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(reqCode)
    {

    case (PICK_CONTACT):
        if (resultCode == Activity.RESULT_OK)
        {
            Uri contactData = data.getData();
                    Cursor c = managedQuery(contactData, null, null, null, null);
                    if (c.getCount() > 0) {
                    while (c.moveToNext()) {
                    String name=c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    edt_rec_name.setText(name);
                    }

        }   
    }

}