我正在尝试测试我的活动,该活动有一个按钮可以转到带有ActivityInstrumentationTestCase2的People应用程序。但问题是People应用程序在另一个任务中开始编辑活动,显然我没有访问权限。那么该怎么办?如何向People应用程序发送信号?
我的意图是:
Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
intent.putExtra(ContactsContract.Intents.Insert.NAME, "");
intent.putExtra(ContactsContract.Intents.Insert.PHONE, "");
答案 0 :(得分:0)
嗯,我想通了,相当肯定其他开发人员会发现它很有用。 首先,要启用与People应用程序的测试交互,您可以使用相关的Intent字段预填充联系人数据:
public static void addAsContactConfirmed(final Context context, final Person person) {
Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
intent.putExtra(ContactsContract.Intents.Insert.NAME, person.name);
intent.putExtra(ContactsContract.Intents.Insert.PHONE, person.mobile);
intent.putExtra(ContactsContract.Intents.Insert.EMAIL, person.email);
intent.putExtra("finishActivityOnSaveCompleted", true); // this line enables instant return People to our app
context.startActivity(intent);
}
然后你需要按回按钮,这是一个棘手的部分:
但是我在这里解决了问题。您需要使用UiAutomation
,可以通过调用final UiAutomation uiAutomation = getInstrumentation().getUiAutomation();
从仪器中获取。
然后你不能将任何关键事件发送到另一个应用程序,因为它需要INJECT_EVENTS权限,这需要系统签名,你的应用程序显然缺乏这个权限:)
所以,请打电话给这个:
uiAutomation.performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
它不需要任何权限,只需跨应用程序工作。请确保在Android 4.3上运行测试。
其他link。