FileNotFoundException:/storage/emulated/0/Pictures/pic.jpg:open failed:EACCES(Permission denied)

时间:2014-10-06 00:49:40

标签: java android

所以我正在拍照,之后我试图将它保存到那条路上,但我无法访问它。试过这个<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>并且没有用。

这就是我拍照并保存的方式。

private void takePic(View v) 
    {
        // se usa para usar algun app del phone para usar sus cosas para hacer lo que queremos envez de crearlo from scratch
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");

        //guarda la imagen
        File imgFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"pic.jpg");

        imgUri = Uri.fromFile(imgFile);

        intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);

        //le dice que use el app de camare y le dice que use la camara de atras 1 = la de atras
        startActivityForResult(intent, TAKE_PICTURE);
    }

    //hay que hacerle override para que haga algo que no es parte del metedo.
    //Por ejemplo quiero que guarde la imagen donde yo quiera y no donde tiene por default.
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        super.onActivityResult(requestCode, resultCode, intent);

        //si presiono el buton de ok
        if(resultCode == Activity.RESULT_OK)
        {
            Uri selectedImg = imgUri;

            // te deja saber que termino de usar la imagen
            getContentResolver().notifyChange(selectedImg, null);

            ImageView imgV = (ImageView)findViewById(R.id.SteerinRackImgVw);

            // lo mismo de horita
            ContentResolver cR = getContentResolver();

            //tiene la data de la img
            Bitmap btMp;

            try 
            {
                btMp = MediaStore.Images.Media.getBitmap(cR, selectedImg);

                imgV.setImageBitmap(btMp);

                //display a small popup de lo que esta pasando
                Toast.makeText(TestMain.this,selectedImg.toString(), Toast.LENGTH_LONG).show();
            } 

            catch (Exception e) 
            {
                Log.e("error", e.toString());
            }
        }
    }

希望我没有错过任何括号:P

当我调试try和catch块时,程序在第一行中突破了try。

我希望这是有道理的。英语不是我的主要语言。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

如果没有logcat,它将很难调试,但你可以尝试这个为初学者

android.permission.READ_EXTERNAL_STORAGE

您有权写,但不能阅读。有关详细信息Android Permissions

,请参阅此处