在尝试将其上传到Firebase之前,我尝试使用“ Nexus 5X API 26”的相机拍摄图片并将其显示在ImageView
字段中。
第一个问题是拍照后,它没有显示在imageView
中。我正在执行以下操作:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, CAMERA_REQUEST_CODE);}
然后我试图以与从图库拍摄的照片相同的方式来显示照片:
filePath = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
我不了解的部分是data.getData()
在两种情况下(对于Gallery和Camera)如何工作?
我猜想uploadImage()
方法对于图库和相机上传都应该是相同的(它已经适用于图库了……)。
所以我目前想念的是我没有得到filePath
,我猜呢?
为了“ .getData()
,是否需要“临时保存”相机的图片?还是没有任何“节省”就可以工作?
我只希望用户拍照,并且应该将其发送到Firebase。用户不必首先在imageView
中看到它,只需获取uri(数据)即可上传。
答案 0 :(得分:0)
这将为您提供帮助。
Intent intent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,7);
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
bitmap= (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream baos=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
imageEncoded = Base64.encodeToString(b,Base64.DEFAULT);
byte[] imageAsBytes = Base64.decode(imageEncoded.getBytes(), Base64.DEFAULT);
InputStream is=new ByteArrayInputStream(imageAsBytes);
bitmap1=BitmapFactory.decodeStream(is);
img.setImageBitmap(bitmap1);
}