Gen*_*tsu 0 camera android arguments bundle android-intent
我正在创建一个动态表单活动,我得到了如何从db创建表单的说明.活动基本上只是滚动问题列表并查看它们的类型并添加它们.所以这是一个将视图添加为问题的活动.这一切都很好.我试图将响应/问题保留在特定问题类中,这些类只是一个基本问题的子类.
我遇到的问题是当我尝试添加相机"问题"以提示用户拍照时,我无法在视图中获得结果.我在视图中管理了启动活动,并将结果返回到问卷调查活动.活动不知道将其添加到哪个问题,因为它都是动态完成的.因此,我尝试通过问题ID作为相机意图中的额外内容,并在问卷调查活动中接收它,然后滚动查看它添加的问题,如果它是相同的,它会将图片添加到与之关联的问题中.
它添加问题的方式是通过一个视图组,只为每个视图组插入一个部分.
这是启动相机的相关部分(我也试过使用它而没有捆绑).这是BaseQuestion的子类,它只是linearlayout的子类:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Bundle bundle = new Bundle();
bundle.putInt("questionId", getQuestionId());
intent.putExtras(bundle);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
Environment.getExternalStorageDirectory(), "image.tmp")));
((Activity)getContext()).startActivityForResult(intent, TAKE_PHOTO);
Run Code Online (Sandbox Code Playgroud)
这是处理活动中结果的相关部分.
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
Bitmap image = null;
switch (requestCode)
{
case TAKE_PHOTO:
{
if (resultCode == RESULT_OK)
{
InputStream inputStream = null;
File file = new File(Environment.getExternalStorageDirectory(),
"image.tmp");
try {
inputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (inputStream == null) {
Uri uri = imageReturnedIntent.getData();
try {
inputStream = getContentResolver().openInputStream(uri);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
image = createScaledBitmapFromStream(inputStream, 200, 300);
Bundle bundle = imageReturnedIntent.getExtras();
if (bundle != null)
{
int questionId = bundle.getInt("questionId");
for (BaseQuestion questionView : questionViews)
{
if (questionId == questionView.getQuestionId())
{
questionView.setResponse(image);
}
}
}
}
else if (resultCode == Activity.RESULT_CANCELED)
{
Log.d("something", "something");
}
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:解决了,可能不清楚答案
我在我设置为-1的超类中创建了questionIdForResult.然后我在运行startActivityForResult时将其设置为questionId,然后在onActivityResult中,我检查每个问题,如果他们的questionIdForResult匹配他们的questionId,如果匹配,请使用那个.然后我将它设置回-1以确定你是否有两个,它不会转到另一个.
您的方法将无法正常工作,因为不需要任何相机应用程序将附加内容从传入Intent
到结果进行神奇复制Intent
.事实上,如果任何相机活动这样做,我会感到很惊讶.
您可以存储questionId()
在活动的数据成员中(例如,questionIdForTheNextActivityResult
),然后使用该值onActivityResult()
.但请记住,使用第三方应用程序拍照意味着您的进程可能会在您再次获得控制权之前终止,因此请务必保存该数据成员并通过onSaveInstanceState()
其恢复onRestoreInstanceState()
.