如何检查ACTION_SEND意图是否已启动?

3

我的应用程序使用标准的简单文本共享。在我的测试中,我想检查我的活动是否启动了共享意图。这可行吗?

我正在使用ActivityInstrumentationTestCase2测试。

活动:

final Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, message);
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, "Share"));

测试:

final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SEND);
intentFilter.addDataType("text/plain");
final ActivityMonitor receiverActivityMonitor = getInstrumentation().addMonitor(
            intentFilter, null, false);

TouchUtils.clickView(this, getActivity().findViewById(R.id.share_button));
final Activity shareActivity = receiverActivityMonitor.waitForActivityWithTimeout(500);
assertNotNull(shareActivity); // Fails

上述测试无效。有没有一种方法可以测试ACTION_SEND意图是否已启动?
临时解决方案
目前,在活动中,我将意图保存到成员变量中:
mSendIntent = new Intent();

所以我可以通过测试来验证它:
assertEquals("android.intent.action.SEND", getActivity().mSharingIntent.getAction());
assertEquals("text/plain", getActivity().mSharingIntent.getType());
String sharedText = getActivity().mSharingIntent.getStringExtra(Intent.EXTRA_TEXT);
assertEquals("test I shared", sharedText);
1个回答

4

您正在将Intent.createChooser的结果传递给startActivity,因此您需要监视Intent.ACTION_CHOOSER操作。

final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_CHOOSER);
final ActivityMonitor receiverActivityMonitor = getInstrumentation().addMonitor(intentFilter, null, false);

TouchUtils.clickView(this, getActivity().findViewById(R.id.share_button));
final Activity shareActivity = receiverActivityMonitor.waitForActivityWithTimeout(500);
assertNotNull(shareActivity);

嗨@Sundrique。很抱歉在这里发帖,但我正在尝试做相同的事情,但是我使用的是onView(allOf(withText(R.string.report_issues)))。perform(click());而不是使用TouchUtils.clickView,我的shareActivity始终为空。这种行为是否与我使用onview.perform而不是使用TouchUtils有关? - Luiz E.
1
嗨@LuizE。你确定你使用了正确的意图操作吗?当你在模拟器或设备上运行测试用例时,你能看到一个选择器显示吗? - Sundrique

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接