Android如何将我的jpeg文件存储在Mobile内部存储中。它没有SD卡

时间:2017-03-01 10:22:01

标签: android file mobile storage

我想将图片文件从Internet保存到我的手机中。我在AndroidManifest文件中使用了Internet和externalstorage权限。但它给出了下面给出的错误。我认为这是因为我的设备没有SD卡。如果是这样,那么我想知道如何存储在内部存储中。

myError

  

java.io.FileNotFoundException:   /storage/emulated/0/Pictures/GettyImages-460712009-560x450.jpg:open   失败:EACCES(权限被拒绝引起:   android.system.ErrnoException:open failed:EACCES(Permission denied)

以下是我的代码。

try {
        URL urlobj = new URL(url);
        connection= (HttpURLConnection) urlobj.openConnection();
        inputStream=connection.getInputStream();

           file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/"+ Uri.parse(url).getLastPathSegment());

            FileOutputStream fileOutputStream = new FileOutputStream(file);

            int reed = -1;
            byte[] buffer = new byte[1024];

            // if no data is return -1 keep reading until -1
            while( ( reed=inputStream.read(buffer) )!= -1){

            fileOutputStream.write(buffer,0,reed);               
}

2 个答案:

答案 0 :(得分:0)

您将获得权限被拒绝异常,因为您没有为具有Android Marshmallow及以上版本的设备实施“运行时”权限。

这是你如何实现这个目标的:

像以前一样添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

如果用户已经授予了权限,则匹配。如果是,请跳过请求许可并继续您的工作,否则请求用户许可:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (!Settings.System.canWrite(this)) {
            requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_EXTERNAL_STORAGE}, 2909);
        } else {
            // your code
        }
    } else {
        // your code
    }

权限结果回调:

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 2909: {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.e("Permission", "Granted");
                } else {
                    Log.e("Permission", "Denied");
                }
                return;
            }
        }
    }

答案 1 :(得分:0)

要将图像保存在内存中,请使用此代码。

您应该在showast文件<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

中添加权限

您需要使用marshmallow及以上版本的运行时权限才能使用Amit sharma答案。

以下是在默认图片目录中保存文件的代码。

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
        imageFileName,  /* prefix */
        ".jpg",         /* suffix */
        storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    return image;
}

有关模式详细信息,请查看此Link