【问题标题】:camera intent app crash相机意图应用程序崩溃
【发布时间】:2018-05-07 05:10:32
【问题描述】:

嘿,有人可以帮帮我吗? 我可以拍照,它会显示在画廊中,但我不能在 imageview 中设置。应用程序崩溃。 我的代码

可能活动结果有问题??

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {




                intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

                File photoFile = null;
                try {
                    photoFile = createImageFile();

                } catch (IOException e) {
                    e.printStackTrace();
                }
String authorities = getApplicationContext().getPackageName() + ".fileprovider";

                Uri imageUri = FileProvider.getUriForFile(camtest.this, authorities, photoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);



                if (photoFile != null) {
                    imageUri = FileProvider.getUriForFile(camtest.this,
                            BuildConfig.APPLICATION_ID + ".fileprovider",
                            photoFile);
                    Log.i("Uri", imageUri.toString());
//                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                }
                else{
                    Log.i("Uri", "none");
                }
                sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(photoFile)));

                startActivityForResult(intent, 7);




            }
        });

文件创建方法:

 File createImageFile() throws IOException {

        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "LetsTalk_img" + timeStamp;
        File storageDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

        File image = File.createTempFile(imageFileName,".jpg", storageDirectory);
        mImageFileLocation = image.getAbsolutePath();
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(image)));
        return image;

    }

和 onactivityresult: 是不是我搞错了?

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 7 && resultCode == RESULT_OK) {



        Bitmap bitmap = (Bitmap) data.getExtras().get("data");
            imageView.setImageBitmap(bitmap);


        }
    }

提前致谢

【问题讨论】:

  • 最重要的如何:堆栈跟踪?
  • 您不应在 onClick() 中调用媒体扫描器。很早。用户甚至可以决定不拍照。将 mediascanner 代码移动到 onActivityResult()。
  • 你尝试在onActivityResult中获取位图。但是当你使用 EXTRA_OUTPUT 时你不会得到一个。

标签: android android-intent camera imageview


【解决方案1】:

您只需将cameraIntent() 方法放在您的按钮单击功能中即可。

private void cameraIntent() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 0);
    }

然后粘贴后。

    @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == Activity.RESULT_OK) {
                if (requestCode == 0){
                    onCaptureImageResult(data);
           }
            }
        }

要在缩略图中设置,请像这样传递 ImageView 变量中的数据:

private void onCaptureImageResult(Intent data) {

        Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
        byteArray = bytes.toByteArray();
        encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
        File destination = new File(Environment.getExternalStorageDirectory(),
                System.currentTimeMillis() + ".jpg");
        FileOutputStream fo;
        try {
            destination.createNewFile();
            fo = new FileOutputStream(destination);
            fo.write(bytes.toByteArray());
            fo.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        imagebox.setImageBitmap(thumbnail);
    }

【讨论】:

  • 我需要 sd 卡吗?
  • 我没有外部存储目录
  • 不,它也可以保存在您的手机内存中。
  • 好的。我会在晚上测试它
  • I have Not an externalstoragedirectory 。你有。每个设备都有。但是你为什么要试试这段代码呢?它将缩略图保存到文件中。您需要存档缩略图吗?更糟糕的是:相机应用程序将不再生成完整的原始文件并将其保存到文件中。因此,您的图库应用中没有图片。坚持你的初衷和代码并解决问题。
猜你喜欢
  • 1970-01-01
  • 2019-05-03
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多