我正在尝试使用layerhq/Atlas-Andorid模拟相机在聊天期间发送图像的意图。以下使用espresso模拟相机意图的代码工作正常,除了Atlas抛出文件不存在错误(原因解释如下)。
Bundle bundle = new Bundle();
Bitmap x = BitmapFactory.decodeResource(intentsRule.getActivity().getResources(), R.drawable.accolade_avatar);
bundle.putParcelable("data", x);
Intent result = new Intent();
result.putExtras(bundle);
intending(hasAction(MediaStore.ACTION_IMAGE_CAPTURE)).respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, result));
clickItem(MessagePage.attachmentButton);
clickItem(MessagePage.cameraButton);
以下是相机意图的图层代码。
private void startCameraIntent(Activity activity) {
String fileName = "cameraOutput" + System.currentTimeMillis() + ".jpg";
File file = new File(getContext().getExternalFilesDir(android.os.Environment.DIRECTORY_PICTURES), fileName);
mPhotoFilePath.set(file.getAbsolutePath());
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final Uri outputUri = Uri.fromFile(file);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);
activity.startActivityForResult(cameraIntent, ACTIVITY_REQUEST_CODE);
}
问题在线
mPhotoFilePath.set(file.getAbsolutePath());
我需要将它设置为一些预先存在的文件路径,如
mPhotoFilePath.set("/storage/DCIM/camera/image.jpg");
我无法修改layer-atlas代码。任何帮助将不胜感激。
答案 0 :(得分:2)
为了获得完整大小的捕获图像,捕获android中的图像意图与输出路径一起使用,这意味着您需要为Camera保存捕获的图像提供文件路径,
见https://developer.android.com/training/camera/photobasics.html。
为了使用Espresso在android测试中测试这个流程,我建议伪造intent的调用者提供的输出文件(layer-atlas代码)。
所以你需要做的是获取调用者提供的路径并将模拟图像保存在那里。
据我所知,espresso-intents不支持它,但使用浓缩咖啡相对容易做到,这是一个代码示例:
//stub intent handling for retreiving RESULT_OK status back
IntentStubberRegistry.load(new IntentStubber() {
@Override
public Instrumentation.ActivityResult getActivityResultForIntent(Intent intent) {
Intent resultIntent = new Intent();
return new Instrumentation.ActivityResult(Activity.RESULT_OK, resultIntent);
}
});
IntentCallback intentCallback = new IntentCallback() {
@Override
public void onIntentSent(Intent intent) {
//extract output path for captured image from intent
Uri uriToSaveImage = intent.getParcelableExtra(MediaStore.EXTRA_OUTPUT);
//save ready-made mock image to the provided Uri
saveImageToUri(test.R.raw.mockedCapturedImage, uriToSaveImage);
}
}
IntentMonitorRegistry.getInstance().addIntentCallback(intentCallback);
<click triggering code >
IntentMonitorRegistry.getInstance().removeIntentCallback(intentCallback);