Android 在尝试访问手机联系人时,未调用OnActivityResult
在我的应用程序中,我想通过手机访问联系人,并用从联系人处获取的一些数据填写表格。当我尝试运行Intent时,我可以在手机中看到联系人列表,但它不会返回任何数据,并且不会调用onActivityResult。有人能帮我吗,因为我是android编程的初学者 以下是我的部分代码: “联系人”按钮的点击事件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
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);
}
}
}
}