保存的位图实例未保存到设备媒体

时间:2018-10-12 05:31:45

标签: java android android-camera android-manifest

当我运行时,程序无法给出有关给定路径的信息。 这是我的主要活动课堂实现

Android框架包括对各种相机和设备上可用相机功能的支持,使您可以在应用程序中捕获图片和视频。本文讨论了一种快速,简单的图像和视频捕获方法,并概述了为用户创建自定义相机体验的高级方法。

    public class MainActivity extends AppCompatActivity {

        private static final int CAMERA_REQUEST_CODE = 1023;
        ImageView mImageView;
        Button mButton;
        Button save;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            mImageView = (ImageView)findViewById(R.id.captureView);
            mButton  =(Button)findViewById(R.id.captureBtn);
            save = (Button)findViewById(R.id.saveBtn);
            mButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(camIntent,CAMERA_REQUEST_CODE);
                    }
            });

            save.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                }
            });

        }


    private void SaveImage(Bitmap finalBitmap) {

        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/DCIM/");
        myDir.mkdir();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-"+ n +".jpg";
        File file = new File (myDir, fname);
        if (file.exists ()) file.delete ();
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
            out.flush();
            out.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode==CAMERA_REQUEST_CODE){
            Bitmap bm = (Bitmap)data.getExtras().get("data");
             SaveImage(bm);
            mImageView.setImageBitmap(bm);
        }
    }
}

这是我在运行时遇到的异常

W/System.err: java.io.FileNotFoundException: /storage/emulated/0/DCIM/Image-8834.jpg (Permission denied)
W/System.err:     at java.io.FileOutputStream.open0(Native Method)
                  at java.io.FileOutputStream.open(FileOutputStream.java:287)
                  at java.io.FileOutputStream.<init>(FileOutputStream.java:223)
W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
                  at com.project.melan.cameraapp.MainActivity.SaveImage(MainActivity.java:62)
                  at com.project.melan.cameraapp.MainActivity.onActivityResult(MainActivity.java:79)
                  at android.app.Activity.dispatchActivityResult(Activity.java:7290)
W/System.err:     at android.app.ActivityThread.deliverResults(ActivityThread.java:4267)
                  at android.app.ActivityThread.handleSendResult(ActivityThread.java:4315)
                  at android.app.ActivityThread.-wrap19(Unknown Source:0)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1647)
                  at android.os.Handler.dispatchMessage(Handler.java:106)
W/System.err:     at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6518)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Application terminated.

如果有人帮助解决此异常,谢谢。

0 个答案:

没有答案