在我的应用中,我想通过手机访问联系人,并在表单中填写一些来自联系人的数据。当我尝试运行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);
}
});
在同一活动的onActivityResult中。
@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也没有错误。请指导我。
感谢。
答案 0 :(得分:1)
您可能没有正确的权限来访问手机上的联系人。您在Android Manifest使用了<uses-permission android:name="android.permission.READ_CONTACTS"/>
吗?
答案 1 :(得分:1)
首先添加权限:
<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);
}
}
}
}
答案 2 :(得分:0)
Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, 1);