使用相机拍摄,在imageview中显示并保存到照片

时间:2017-04-30 13:28:28

标签: android

我正在尝试一个月来制作简单的相机捕捉但没有成功。我正在开发的这个应用程序几个月前工作很好,但因为我更新Android到版本7该应用程序停止正常工作。我想点击一个按钮,在捕获后激活相机(内置非api)以在imageview中显示图像(高质量)并将图像保存到图片文件夹。之后将图像发送到服务器。在我的应用程序的现有版本中,我捕获图像,在imageview中显示保存的图像并通过json发送到服务器。现在活动结果为空,imageview为空:-(请帮助

旧代码很有效率

public void onClick(View v) {
    switch (v.getId()) {
        case R.id.cancel_btn:
            finish();
            break;
        case R.id.camera_btn:
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            cameraIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);
            break;
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
        Uri u = data.getData();
        Log.d("u", String.valueOf(u));
        theImageUriStr = String.valueOf(u);
        Log.d("theImageUriStr", String.valueOf(theImageUriStr));
        mImageView = (ImageView) findViewById(R.id.mImageView);
        ALBUM_ART_URI = Uri.parse(String.valueOf(theImageUriStr));
        Picasso.with(AddNewDish.this).load(ALBUM_ART_URI).into(mImageView);
    }
    else{
        Log.d("mmmm", String.valueOf(resultCode));
    }
}

我从Log.d获得的结果和theImageUriStr为空

2 个答案:

答案 0 :(得分:7)

2017年,

Android中唯一逼真的摄像头方法是革命性的图书馆

https://github.com/gogopop/CameraKit-Android

它改变了Android开发中的所有内容 -

没有其他可行的方法。

谷歌(实际上是他们的日本办事处)终于自己写了一些让Android摄像头变成实际软件的东西。那是:https://github.com/google/cameraview。那是一个神奇的图书馆,摄像机难度从10到5。

flurgle库https://github.com/gogopop/CameraKit-Android是第一个最终解决所有问题并使相机像普通软件一样工作的大门。困难现在是1。

这样做可以在您的应用中放置实时相机

<com.flurgle.camerakit.CameraView
    android:id="@+id/camera"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:adjustViewBounds="true"/>

这样做拍照

cameraView.setCameraListener(new CameraListener() {
  @Override
  public void onPictureTaken(byte[] picture) {
   super.onPictureTaken(picture);
   Bitmap result = BitmapFactory.decodeByteArray(picture, 0, picture.length);
   save the image...
  });

一切都结束了。就是这样。

使用Android相机的十年生活地狱终于完成了。

答案 1 :(得分:0)

如果您希望内置的相机应用程序拍照并将图像返回到您的应用程序,请按照以下步骤操作:

  1. 将此添加到清单:<uses-feature android:name="android.hardware.camera" android:required="true" />
  2. 在您的活动中使用此功能来调用相机:

    private void dispatchTakePictureIntent() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { startActivityForResult(takePictureIntent, 1); } }

  3. 使用此功能处理从相机接收的图像:

    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); //mImageView.setImageBitmap(imageBitmap); } }

干杯!