Evg*_*oDi 4 android android-intent android-camera
我做了
@Override
public void onClick(View v) {
switch (v.getId()){
//???? ??????? ?????? - ????????? ??
case R.id.b_camera:
//uri = generateFileUri();
if (uri == null) {
Toast.makeText(getView().getContext(), getResources().getString(R.string.sdnot), Toast.LENGTH_LONG).show();
return;
}
Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, uri);
//intentCamera.putExtra("return-data", true);
startActivityForResult(intentCamera, PHOTO_INTENT_REQUEST_CODE);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在 onCreateView() 中调用方法 generateFileUri()。Line intentCamera.putExtra("return-data", true); 对我不起作用(如果在 getParceble() 处使用“返回数据”作为 onActivityResult 中的键)。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent imageReturned) {
switch (requestCode) {
//???? ????????? ?????? ?? ??????
case PHOTO_INTENT_REQUEST_CODE:
if (resultCode == getActivity().RESULT_OK) {
Log.i("HHHHHHHHHHHH", "result ok");
//????????? uri ????? ?? ???????
Uri selectedImage = imageReturned.getData();
Log.i("HHHHHHHHHHHH", "getdata works!");
//??????? ?????? ??? ??????? ????? ????????
Intent last_intent_photo = new Intent(getView().getContext(), ViewPhoto.class);
//???????? ? ?????? ???? uri
last_intent_photo.putExtra("fotka",selectedImage);
//???????? ????? ????????
startActivity(last_intent_photo);
} else if (resultCode == getActivity().RESULT_CANCELED)
Toast.makeText(getView().getContext(), "Capture cancelled", Toast.LENGTH_LONG).show();
else
Toast.makeText(getView().getContext(), "Capture failed", Toast.LENGTH_LONG).show();
break;
default: super.onActivityResult(requestCode, resultCode, imageReturned);
}
}
Run Code Online (Sandbox Code Playgroud)
我看到日志“结果正常”。我认为这意味着相机运行良好。但后来我看到: 未能传递结果 ResultInfo{who=android:fragment:2, request=100, result=-1, data=null}。怎么可能?!
好吧,我试过 Uri selectedImage = imageReturned.getExtras().getParcelable(); 但我没有打算将其放入 getParcelable(String key) 中。
那么,为什么结果没问题,但 data=null 呢?
选项1:
//Uri myUri = ...
intent.setData(myUri);
Run Code Online (Sandbox Code Playgroud)
和
Uri uri = intent.getData();
Run Code Online (Sandbox Code Playgroud)
选项 2:
根据文档:
toString() - 返回此 URI 的编码字符串表示
//Uri myUri = ...
intent.putStringExtra("uri",myUri.toString());
Run Code Online (Sandbox Code Playgroud)
和
String uriString = intent.getStringExtra("uri");
Uri uri = Uri.parse(uriString);
Run Code Online (Sandbox Code Playgroud)
既然你自己通过了,为什么还需要获取urifrom呢?intert只需使用与以下相同的uri内容:
intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, uri);\nRun Code Online (Sandbox Code Playgroud)\n\nUPD澄清:
\n\n当您使用选项启动cameta时:
\n\nintentCamera.putExtra(MediaStore.EXTRA_OUTPUT, uri);\nRun Code Online (Sandbox Code Playgroud)\n\n您告诉相机照片必须存储在该路径中。因此,如果结果正常,您需要通过此 uri 获取该照片。
\n\n if (resultCode == getActivity().RESULT_OK) {\n Log.i("HHHHHHHHHHHH", "result ok");\n\n // same as passed in intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, uri);\n Uri selectedImage = uri; \n\n Log.i("HHHHHHHHHHHH", "getdata works!");\n //\xd1\x81\xd0\xbe\xd0\xb7\xd0\xb4\xd0\xb0\xd0\xb5\xd0\xbc \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd0\xbd\xd1\x82 \xd0\xb4\xd0\xbb\xd1\x8f \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x83\xd1\x81\xd0\xba\xd0\xb0 \xd0\xbd\xd0\xbe\xd0\xb2\xd0\xbe\xd0\xb9 \xd0\xb0\xd0\xba\xd1\x82\xd0\xb8\xd0\xb2\xd0\xb8\xd1\x82\xd0\xb8\n Intent last_intent_photo = new Intent(getView().getContext(), ViewPhoto.class);\n //\xd0\xbf\xd0\xbe\xd0\xbc\xd0\xb5\xd1\x89\xd0\xb0\xd0\xb5\xd0\xbc \xd0\xb2 \xd0\xb8\xd0\xbd\xd1\x82\xd0\xb5\xd0\xbd\xd1\x82 \xd1\x8d\xd1\x82\xd0\xbe\xd1\x82 uri\n last_intent_photo.putExtra("fotka",selectedImage);\n //\xd1\x81\xd1\x82\xd0\xb0\xd1\x80\xd1\x82\xd1\x83\xd0\xb5\xd0\xbc \xd0\xbd\xd0\xbe\xd0\xb2\xd1\x83\xd1\x8e \xd0\xb0\xd0\xba\xd1\x82\xd0\xb8\xd0\xb2\xd0\xb8\xd1\x82\xd0\xb8\n startActivity(last_intent_photo);\n} \nRun Code Online (Sandbox Code Playgroud)\n\n更新2
\n\nFragmentScaling.onActivityCreated:
\n\n@Override\npublic void onActivityCreated(Bundle savedInstanceState) {\n super.onActivityCreated(savedInstanceState);\n\n if (getActivity().getIntent().hasExtra("uri")) {\n uri = (Uri)getActivity().getIntent().getParcelableExtra("uri");\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
17449 次 |
| 最近记录: |