图片保存到 SdCard for 6.0.1 Android 版本

Image Save to SdCard for 6.0.1 Android Version

此代码在 6.0.1 android 版本下工作正常,但如果我 运行 此应用程序在 6.0.1 android 设备上,它不会将图像保存到 SD 卡。 我需要为 6.0.1 设备更新什么?

public void SaveImages(int a ,String b)
        {
            Bitmap bitmap = null;
            OutputStream output;
            if(a==0)
            {
                bitmap = BitmapFactory.decodeResource(getResources(),
                        R.drawable.image_0);
            }



File filepath = Environment.getExternalStorageDirectory();

        // Create a new folder in SD Card
        File dir = new File(filepath.getAbsolutePath()
                + "/Wallpapers/");
        dir.mkdirs();

        // Create a name for the saved image
        File file = new File(dir,b);

        // Show a toast message on successful save
        Toast.makeText(FullImageActivity.this, "Loading...",
                Toast.LENGTH_SHORT).show();
        Toast.makeText(FullImageActivity.this, "Image Saved to SD Card",
                Toast.LENGTH_SHORT).show();
        try {

            output = new FileOutputStream(file);

            // Compress into png format image from 0% - 100%
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);
            output.flush();
            output.close();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
        }

        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

在 Android 6.0+ 上,您需要 request runtime permission to write to external storage.


为了请求写入外部存储的运行时权限:

public class MarshmallowPermission {
    public static final int EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 2;

    public MarshmallowPermission() {
    }

    public boolean checkPermissionForExternalStorage(Activity activity) {
        if(Build.VERSION.SDK_INT >= 23) {
            int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
            if(result == PackageManager.PERMISSION_GRANTED) {
                return true;
            } else {
                return false;
            }
        } else {
            return true;
        }
    }

    public void requestPermissionForExternalStorage(Activity activity) {
        if(ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            Toast.makeText(activity,
                    "External Storage permission needed. Please allow in App Settings for additional functionality.",
                    Toast.LENGTH_LONG).show();
            // user has previously denied runtime permission to external storage
        } else {
            ActivityCompat.requestPermissions(activity,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE);
        }
    }
}

那你可以做

if(!marshmallowPermission.checkPermissionForExternalStorage(this)) {
    marshmallowPermission.requestPermissionForExternalStorage(this);
} else {
    // can write to external
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode == MarshmallowPermission.EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE) {
        if(marshmallowPermission.checkPermissionForExternalStorage(this)) {
            // can write to external
        } else {
            // runtime permission denied, user must enable permission manually
        }
    }
}

参考以下link, How to save the image to SD card on button Click android。和 Saving image from image view to sd card : Android。 详细教程, http://www.android-examples.com/save-store-image-to-external-storage-android-example-tutorial/