Android Contact Picker Intent 总是返回空的附加信息

Posted

技术标签:

【中文标题】Android Contact Picker Intent 总是返回空的附加信息【英文标题】:Android Contact Picker Intent always return empty extras 【发布时间】:2015-03-30 20:22:51 【问题描述】:

我有一个联系人选择方法,它使用两个附加项来指定您是在我的应用程序中创建新的联系人快捷方式还是编辑现有的联系人快捷方式。

问题是无论我做什么,额外的似乎总是为空,当我尝试访问它们时会导致 nullPointerException。

我怀疑将 Intent 类型设置为 ContactsContract.Contacts.CONTENT_TYPE 会重置任何用户定义的额外内容,但我不确定。

这是我目前正在做的事情:

联系人挑选意图

 Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
                Bundle extras = new Bundle();
                extras.putBoolean("isEditing", isEditing);
                extras.putLong("shortcut", shortcut.getId());
                intent.putExtras(extras);
                startActivityForResult(intent, PICK_CONTACT_REQUEST);

而在onActivityResult()

switch (requestCode) 
            case (PICK_CONTACT_REQUEST):
                if (resultCode == getActivity().RESULT_OK) 
                    Uri contactData = data.getData();
                    Bundle bundle = data.getExtras();
                    Boolean isEditing = false;
                    long shortcutId = 0;
                    if (bundle != null) 
                        Toast.makeText(getActivity(), "Bundle Not Null", Toast.LENGTH_SHORT).show();
                        if (bundle.containsKey("isEditing")) 
                            isEditing = bundle.getBoolean("isEditing", false);
                            Toast.makeText(getActivity(), "" + isEditing, Toast.LENGTH_SHORT).show();
                        
                        if (bundle.containsKey("shortcutId")) 
                            shortcutId = bundle.getLong("shortcutId", 0);
                            Toast.makeText(getActivity(), "" + shortcutId, Toast.LENGTH_SHORT).show();
                        
                    

祝酒词永远不会显示,因为我猜找不到捆绑包。 我也尝试过不同的工作流程,使用Intent.putExtraString("isEditing", value),然后使用intent.getStringExtra("isEditing", false) 获取它们,跳过将额外内容打包成一个捆绑包(不太了解这两个工作流程之间的区别),但唉,我遇到了同样的问题。

任何帮助将不胜感激。

【问题讨论】:

您找到解决方案了吗? 【参考方案1】:

编辑: 当您输入您的 long 值时,您会这样做

extras.putLong("shortcut", shortcut.getId());

所以你必须像这样检索它

long shortcutId = bundle.getLong("shortcut", 0);

然后您必须从启动ActivityIntent 中获取Bundle extras,如下所示。

switch (requestCode) 
    case (PICK_CONTACT_REQUEST):
        if (resultCode == getActivity().RESULT_OK) 
            Uri contactData = data.getData();
            //Here you get the intent extras
            Bundle bundle = getIntent().getExtras();
            //Boolean isEditing = false;
            //long shortcutId = 0;
            if (bundle != null) 
                Toast.makeText(getActivity(), "Bundle Not Null", Toast.LENGTH_SHORT).show();
                if (bundle.hasExtras())
                    boolean isEditing = bundle.getBoolean("isEditing", false);                            
                    long shortcutId = bundle.getLong("shortcut", 0);
                    if(isEditiong != null)
                        Toast.makeText(getActivity(), "" + isEditing, Toast.LENGTH_SHORT).show();
                    if(shortcutId != null)
                        Toast.makeText(getActivity(), "" + shortcutId, Toast.LENGTH_SHORT).show();
                
            
                    
    
    break;

【讨论】:

以上是关于Android Contact Picker Intent 总是返回空的附加信息的主要内容,如果未能解决你的问题,请参考以下文章

react native - android - Picker 有下划线

在 Swift 2.0 Contact Framework iOS 中从 CNContactPicker 获取电子邮件地址

从Swift 2.0 Contact Framework iOS中的CNContactPicker获取电子邮件地址

小白提问:android的picker控件GUI问题。

运行 image_picker 时我的新 android 应用程序崩溃(基于颤振飞镖)

[Nagios] Error: Template 'timman' specified in contact definition could not be not