【问题标题】:Android how to store my jpeg file in Mobile internal Storage. It doesn't have an SD CARDAndroid 如何将我的 jpeg 文件存储在移动内部存储中。它没有 SD 卡
【发布时间】:2017-07-20 14:58:00
【问题描述】:

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

我的错误

java.io.FileNotFoundException: /storage/emulated/0/Pictures/GettyImages-460712009-560x450.jpg:打开 失败:EACCES(权限被拒绝原因: android.system.ErrnoException:打开失败:EACCES(权限被拒绝)

下面是我的代码。

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);               
}

【问题讨论】:

  • 发布您的权限。如果使用棉花糖,您必须获得您的应用信息的许可
  • 您在哪个设备上运行?如果是棉花糖,请将其更改为棒棒糖或低于棉花糖。如果这不可能,请在您的应用中设置权限允许

标签: android file mobile storage


【解决方案1】:

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

你应该在你的manifast文件中添加权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

你需要棉花糖及以上版本的运行时权限,使用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

【讨论】:

    【解决方案2】:

    您收到 Permission denied Exception 因为您没有为具有 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;
                }
            }
        }
    

    【讨论】:

    • 谢谢!我的设备在棉花糖上。
    • 谢谢!我的设备在棉花糖上。
    猜你喜欢
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多