如何在android中通过摄像头传递单独的参数
我正在创建一个动态表单活动,我得到了如何从db生成表单的说明。活动本质上只是滚动问题列表,查看问题类型并添加它们。因此,这是一项将视图添加为问题的活动。这一切本身都很好。我试图将回答/问题保留在特定的问题类中,这些问题类只是基本问题的子类 我遇到的问题是,当我尝试添加相机“问题”以提示用户拍照时,我无法在视图中获得结果。我在视图中管理了启动活动,它将结果返回给问卷活动。活动不知道要将其添加到哪个问题,因为它都是动态完成的。所以我试着在相机意图中把questionId作为一个额外信息传递给大家,并在问卷活动中接收它,然后滚动它添加的问题,如果是同一个问题,它会将图片添加到它关联的问题中 它添加问题的方式是使用一个视图组,该视图组仅为每个问题插入一个零件 这是启动相机的相关部分(我也尝试过不捆绑使用它)这是BaseQuestion的一个子类,它只是linearlayout的一个子类:如何在android中通过摄像头传递单独的参数,android,android-intent,camera,arguments,bundle,Android,Android Intent,Camera,Arguments,Bundle,我正在创建一个动态表单活动,我得到了如何从db生成表单的说明。活动本质上只是滚动问题列表,查看问题类型并添加它们。因此,这是一项将视图添加为问题的活动。这一切本身都很好。我试图将回答/问题保留在特定的问题类中,这些问题类只是基本问题的子类 我遇到的问题是,当我尝试添加相机“问题”以提示用户拍照时,我无法在视图中获得结果。我在视图中管理了启动活动,它将结果返回给问卷活动。活动不知道要将其添加到哪个问题,因为它都是动态完成的。所以我试着在相机意图中把questionId作为一个额外信息传递给大家,并
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);
这是处理活动中的结果的相关部分
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;
}
}
}
编辑:已解决,答案可能不清楚
我在设置为-1的超类中生成了questionIdForResult。然后在运行startActivityForResult时将其设置为questionId,然后在onActivityResult中,检查每个问题的questionIdForResult是否与questionId匹配,如果匹配,则使用该问题。然后我将其设置回-1,以确保如果您有两个,它不会转到另一个。您的方法将不起作用,因为不需要任何摄像头应用程序将额外内容从传入的
Intent
神奇地复制到结果Intent
。事实上,如果有任何相机活动会这样做,我会相当惊讶
您可以将
questionId()
存储在活动的数据成员中(例如,questionIdForTheNextActivityResult
),然后在onActivityResult()中使用该值。但是请记住,使用第三方应用程序拍照意味着在您再次获得控制权之前,您的过程可能会终止,因此请确保通过onSaveInstanceState()
保存该数据成员,并通过onRestoreInstanceState()
恢复该数据成员。您的方法将不起作用,因为不需要任何摄像头应用程序将传入的Intent
中的额外内容神奇地复制到结果Intent
。事实上,如果有任何相机活动会这样做,我会相当惊讶
您可以将questionId()
存储在活动的数据成员中(例如,questionIdForTheNextActivityResult
),然后在onActivityResult()中使用该值。不过,请记住,使用第三方应用程序拍照意味着在您再次获得控制权之前,您的过程可能会终止,因此请确保通过onSaveInstanceState()
保存该数据成员,并通过onRestoreInstanceState()
将其还原?听起来像是建议将变量作为全局值存储在活动中。我仍然有在事先不知道id的情况下将其传递回活动的问题。当我从摄像机返回时,我如何将其传递回?@Gentatsu:“我仍然有在事先不知道id的情况下将其传递回活动的问题”--如果你有足够的“id知识”要将它放在与startActivity()
一起使用的Intent
中,您有足够的“id知识”,只需在数据成员的活动中保留它即可。创建它时,它知道每个问题的所有id,但不知道其中发生了什么。该活动只是作为一个容器。现在是CameraQuestionView->CameraActivity->QuestionNaiResponsibility。如果它能回到摄像机视图,我会接受的。该活动包含所有ID,它无法区分要将信息添加到哪个ID,我只需要一种方法告诉它需要转到哪个ID。如果我听起来很粗鲁,我很抱歉,但是如果我想把我想说的话连贯地表达出来,那是非常令人沮丧的。我发现你可以将信息添加到物理文件本身,比如图像的描述,但如果可能的话,我想避免这样做。我还希望避免将其作为SP,或应用程序中全球可用的任何其他内容。我正在寻找一个好的方法,而不仅仅是一个快速而肮脏的修复方法。@Gentatsu:“活动只是充当一个容器”——然后您需要为容器提供更多的智能,或者使用一个更智能的容器(例如,一个片段,而不是自定义视图)。“它无法区分将信息添加到哪一个”——你表现得好像你有选择权。你没有。无论是活动还是片段,onActivityResult()的实现者都需要拥有处理该响应所需的一切。首先是onActivityResult()
的实现者负责startActivityForResult()
调用。我如何传递它?听起来像是建议将变量作为全局值存储在活动中。我仍然有在事先不知道id的情况下将其传递回活动的问题。当我从摄像机返回时,我如何将其传递回?@Gentatsu:“我仍然有在事先不知道id的情况下将其传递回活动的问题”--如果你有足够的“id知识”将其放在与startActivity()一起使用的Intent
的额外部分<