Select 浓缩咖啡和安卓联系人选取器

Select 浓缩咖啡和安卓联系人选取器,select,click,android-espresso,contactpicker,Select,Click,Android Espresso,Contactpicker,我尝试通过浓缩咖啡添加一个Android联系人选择器,但这不起作用 这是调用联系人选择器的命令: Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, RC_PICK_CONTACT); 当我运行浓缩咖啡测试时,会显示触点选择器。好的,现在我尝试按显示名称选择一个特定的联系人条目(例如“Jake”)。不幸的是,我不

我尝试通过浓缩咖啡添加一个Android联系人选择器,但这不起作用

这是调用联系人选择器的命令:

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, RC_PICK_CONTACT);
当我运行浓缩咖啡测试时,会显示触点选择器。好的,现在我尝试按显示名称选择一个特定的联系人条目(例如“Jake”)。不幸的是,我不知道如何做到这一点。我尝试了以下方法:

onData(withItemContent("Jake")).inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView())))).perform(click()); 
我也尝试过这种变化:

onView(withText("Jake")).inRoot(withDecorView(not(is(getActivity().getWindow().getDecorView())))).perform(click());
两种方法都不成功。如前所述,将显示联系人选择器,但未选择任何内容


有什么想法吗?

你所经历的是正常的行为,因为联系人选取器属于外部活动,其用户界面无法操纵。尝试断言任何内容都会导致测试暂停一段时间,并最终导致错误

android.support.test.espresso.NoActivityResumedException:阶段中没有活动恢复。你忘了发起活动了吗。(test.getActivity()或类似工具)

但是,请向新生代问好,这是为了挽救我的声誉:

使用预期的API(Mockito.when的表亲),您可以提供 对使用startActivityForResult启动的活动的响应

更新 以下是我当前的解决方案,它工作正常,但需要一些体面的代码清理:

    @Test
    public void testContactPickerResult(){

        Intent resultData = new Intent();
        resultData.setData(getContactUriByName("Joah"));
        Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData);

        intending(toPackage("com.google.android.contacts")).respondWith(result);

        onView(withId(R.id.contactPickerLauncher))
                .check(matches(isDisplayed()))
                .perform(click());

        onView(withId(R.id.pickedContact))
                .check(matches(withText(getContactNumberByName("Joah"))));
    }
在启动活动中,我将使用联系人Uri处理传入的意图,并对其执行任何必要的操作

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        TextView result = (TextView) findViewById(R.id.pickedContact);

        if (requestCode == 42 && resultCode == RESULT_OK){
            Uri contactUri = data.getData();             
            String[] projection = {ContactsContract.CommonDataKinds.Phone.NUMBER};
            Cursor cursor = getContentResolver().query(contactUri, projection, null, null, null);
            cursor.moveToFirst();
            int column = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            String number = cursor.getString(column);
            result.setText(number);
        }
    }
另外,要相应修改的帮助器方法:

public Uri getContactUriByName(String contactName) {
        Cursor cursor = mActivityRule.getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

        if (cursor.getCount() > 0) {
            while (cursor.moveToNext()) {
                String id = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
                String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                if (name.equals(contactName)) {
                    return Uri.withAppendedPath(ContactsContract.Data.CONTENT_URI, id);
                }
            }
        }
        return null;
    }

你现在有了一个完整的答案,让我们知道它是否对你有效,如果有用的话,不要忘记接受它。嘲笑的意图对我不起作用。这大概是因为我想用它来选择联系人。我用“newintent(intent.ACTION_-PICK)”创建意图,因此模拟意图的方法是“intenting(hasAction(intent.ACTION_-PICK)).respondWith(result);”。