在 OnCreate() Android 中为联系人调用 onActivityResult
Posted
技术标签:
【中文标题】在 OnCreate() Android 中为联系人调用 onActivityResult【英文标题】:Call onActivityResult for contact in OnCreate() Android 【发布时间】:2013-04-12 15:28:02 【问题描述】:我从另一个问题中获得了此代码,但我不知道如何在我的 onCreate()
活动中调用此 onActivityResult()
类来显示我手机中的第一个联系人。另外,“if (requestCode == RQS_PICKCONTACT)
”和“RQS_PICKCONTACT
”代表什么?有人可以澄清一下吗?
public class MainActivity extends Activity
Button buttonReadContact;
TextView textPhone;
final int RQS_PICKCONTACT = 1;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonReadContact = (Button)findViewById(R.id.readcontact);
textPhone = (TextView)findViewById(R.id.phone);
buttonReadContact.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
//Start activity to get contact
/*final Uri uriContact = ContactsContract.Contacts.CONTENT_URI;
Intent intentPickContact = new Intent(Intent.ACTION_PICK, uriContact);
startActivityForResult(intentPickContact, RQS_PICKCONTACT);
*/
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
// BoD con't: CONTENT_TYPE instead of CONTENT_ITEM_TYPE
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
startActivityForResult(intent, RQS_PICKCONTACT);
);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
// TODO Auto-generated method stub
if (resultCode == RESULT_OK)
if(requestCode == RQS_PICKCONTACT)
Uri returnUri = data.getData();
Cursor cursor = getContentResolver().query(returnUri, null, null, null, null);
if (cursor.moveToNext())
int columnIndex_ID = cursor.getColumnIndex(ContactsContract.Contacts._ID);
String contactID = cursor.getString(columnIndex_ID);
int columnIndex_HASPHONENUMBER = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
String stringHasPhoneNumber = cursor.getString(columnIndex_HASPHONENUMBER);
if(stringHasPhoneNumber.equalsIgnoreCase("1"))
Cursor cursorNum = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactID,
null,
null);
//Get the first phone number
if(cursorNum.moveToNext())
int columnIndex_number = cursorNum.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String stringNumber = cursorNum.getString(columnIndex_number);
textPhone.setText("0"+stringNumber);
else
textPhone.setText("NO Phone Number");
else
Toast.makeText(getApplicationContext(), "NO data!", Toast.LENGTH_LONG).show();
【问题讨论】:
【参考方案1】:当你调用 startActivityForResult(intent,requestCode)
当用户返回调用活动时调用onActivityResult
请求代码 //你可以通过调用startActivityForResult来启动多个活动,所以这个值是为了区分它们
结果代码 //这个值是被调用的activity设置的,用来表示预期的操作是否成功。
数据 //这是一个Intent类型的对象,其中包含被调用活动返回的数据。
这部分执行时在你的代码中:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
// BoD con't: CONTENT_TYPE instead of CONTENT_ITEM_TYPE
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
startActivityForResult(intent, RQS_PICKCONTACT);
新活动已启动,当用户通过选择联系人从该活动返回时调用 onActivityResult
【讨论】:
【参考方案2】:onActivityResult 在你启动意图或你选择一个联系人之后被调用。 RQS_PICK_CONTACT 你可以随意改变。像 2 、 3,4 或其他数字。 它只是 onActivityResult 中 requestCode 的标识,因此您可以根据需要进行操作。
【讨论】:
以上是关于在 OnCreate() Android 中为联系人调用 onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 应用程序中为联系我们表单设置 onClickListener