在 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

如何在Android ListView中为菜单项创建图标?

在 Fragment Android Studio 中为解析器 JSON 创建类

在android中获取联系人非常慢

Android - 获取所有联系人列表时出错

尽管覆盖了 onSaveInstanceState,但片段的包在 onCreate 中为空