当我启动camera时,数据为空。我不知道为什么。这是相机的代码:
((Button)view.findViewById(R.id.BtnOpenCamera)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String file = "myimg.jpg";
File path = new File(Environment.getExternalStorageDirectory()+"/"+file);
Uri outputFileUri = FileProvider.getUriForFile(getActivity().getApplicationContext(), BuildConfig.APPLICATION_ID
+ ".provider", path);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
cameraIntent.putExtra("return-data", true);
startActivityForResult(cameraIntent, 0);
}
});
EDİT;添加了onActivityResult代码块
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e(LoggerID,requestCode+" "+resultCode+" "+(data != null));
}
答案 0 :(得分:0)
检查是否有帮助
((Button)view.findViewById(R.id.BtnOpenCamera)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Starts the Camera
Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intentCamera, 0);
}
});
然后在onActivityResult()
中捕获uri
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0){
try {
// 1) Get the bitmap from the taken picture;
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
// 2) Converts the bitmap into image String URL;
Uri uri = ImageManager.getImageUriFromBitmap(getActivity(), bitmap, 50);
String imgURL = ImageManager.getRealPathFromUri(getActivity(), uri);
// Use the imgURL the way you need.
} catch (NullPointerException e){e.printStackTrace();}
}
}
答案 1 :(得分:0)
如果相机在片段上打开,则也应在活动中调用它
答案 2 :(得分:0)
通过注册用于在特定设备上处理它的任何相机应用程序,都可以实现ACTION_IMAGE_CAPTURE
意图。即使您只看制造商预先安装在设备上的“官方”相机应用,此类应用也会有很大差异。
并非所有这些应用程序(特别是在小众设备上)都完全符合官方规范。众所周知,三星手机还可以广泛处理意向合同要求。
在您的情况下,代码用于未公开的"return-data"
额外。我在一些与三星相关的论坛上看到了它,但是即使如此,也没有证据表明它确实有效。
用于ACTION_IMAGE_CAPTURE
意图状态的only reliable reference至数据,
调用方可以传递一个额外的EXTRA_OUTPUT来控制将图像写入何处。如果不存在EXTRA_OUTPUT,则会在Extra字段中将一个小型图像作为Bitmap对象返回。这对于只需要较小图像的应用程序很有用。
但是在现实生活中,即使这样也无法保证。这意味着您的应用应该准备从ACTION_IMAGE_CAPTURE
获取空的数据,这仅仅是因为您不控制将图像带到onActivityResult()
的应用,即使您不这样做也是如此。不能通过额外 EXTRA_OUTPUT 。