首页 > 解决方案 > 为什么我不能使用我的代码保存到外部存储?

问题描述

我正在尝试编写一个需要保存到外部存储的程序。现在我似乎无法保存到外部存储。

我包括了必要的许可

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

我的代码是用于写入外部存储的简单测试。

final Button button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String path = Environment.getExternalStorageDirectory() + "/Pictures/" + "test.jpg";                
            File file = new File(path);
            if (!file.exists()) {
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    });

我已经在模拟器和物理设备上运行了这段代码。在这两种情况下,我都没有看到保存到图片文件夹的文件。真的需要帮助。

标签: androidsaveandroid-external-storage

解决方案


由于 Android M+,您不仅需要在 Manifest 中请求权限,还需要在运行时请求权限

private void requestPermission() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ) {
        ActivityCompat
                .requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
    } else {
        //your permission was already granted then write to storage        
    }
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case 1:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Permission Granted
               // here you write to the storage for the first time
            } else {
                // Permission Denied               
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

推荐阅读