android - 如何调用 Android 联系人列表并从其详细信息屏幕中选择一个电话号码?

标签 android

我已经阅读了已经发布的解决方案,但他们没有告诉我如何使用系统的联系方式屏幕来选择要使用的任何一个号码? 我正在开发一个短信发送安卓应用程序,它可以选择手机的联系人和用户想要发送到的号码......

到目前为止,我还没有找到任何关于选择任何一个数字的信息。它只需要以编程方式完成吗?从数据库中检索所有号码并向其发送短信?

问候

雪利酒

最佳答案

呼,我花了一些时间,但我想我有你需要的答案(即使已经为时已晚,但我仍会将其发布为其他人的引用)。

在我目前正在开发的应用程序中,用户可以在其中输入电话号码 EditText 或单击按钮并从电话通讯录中选择一个人。如果此人有多个电话号码,则有一个下拉列表,他可以从中准确选择一个。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.contact_picker);

    // this opens the activity. note the  Intent.ACTION_GET_CONTENT
    // and the intent.setType
    ((Button)findViewById(R.id.pick_person)).setOnClickListener( new OnClickListener() {
        @Override
        public void onClick(View v) {
            // user BoD suggests using Intent.ACTION_PICK instead of .ACTION_GET_CONTENT to avoid the chooser
            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, 1);                
        }
    });
}

现在,一旦用户选择了一个联系人(并且可能选择了几个电话号码之一),您就可以按正常方式检索数据:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (data != null) {
        Uri uri = data.getData();

        if (uri != null) {
            Cursor c = null;
            try {
                c = getContentResolver().query(uri, new String[]{ 
                            ContactsContract.CommonDataKinds.Phone.NUMBER,  
                            ContactsContract.CommonDataKinds.Phone.TYPE },
                        null, null, null);

                if (c != null && c.moveToFirst()) {
                    String number = c.getString(0);
                    int type = c.getInt(1);
                    showSelectedNumber(type, number);
                }
            } finally {
                if (c != null) {
                    c.close();
                }
            }
        }
    }
}

public void showSelectedNumber(int type, String number) {
    Toast.makeText(this, type + ": " + number, Toast.LENGTH_LONG).show();      
}

这里是 documentation for CommonDataKinds.Phone for on dev.android .

int "type"告诉您号码的类型:mobile (2)、home (1)、work (3) 等等。

注意:在用户选择联系人后,他会得到一个数字微调器,但没有指明数字类型。这对用户来说并不友好:如果一个联系人有 5 个分配的号码……呃,其中哪一个又是传真号码?

另一个注意事项:上面的例子需要 sdk > 5 (Android 2.0+),所以没有 1.6 (=sdk 4)。 1.6 有不同的 api,如果你想同时支持这两个版本,请阅读 article about the contacts API on dev.android .

祝你好运。

免责声明:我从 PickContact.java example 中复制了大部分代码

关于android - 如何调用 Android 联系人列表并从其详细信息屏幕中选择一个电话号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4993063/

相关文章:

java - for循环中的Findviewbyid()

android - 调用 BroadcastReceiver 时应用程序崩溃

android - 从 ExifInterface 获取旋转总是返回 0

android - 如何设置两个布局的高度。?

java - 为什么我当前位置的城市在 android studio 中为空?

android - 在日志中打印当前返回堆栈

android - 我如何从另一个屏幕调用 webview

java - 如何从另一个 Activity 重新排列 MainActivity 中的 ArrayList

android - 使用数据绑定(bind)将数据从 viewModel 传递到 onClick 函数的正确方法是什么?

android - 工具栏下的 ViewPager 不起作用