Android 12 外部文件写入权限

介绍

在 Android 12 中,Google 引入了一些新的权限控制机制,其中包括了对外部文件写入权限的限制。这意味着应用程序在访问设备的外部存储空间时必须获得用户的授权。在本文中,我们将讨论如何在 Android 12 中请求外部文件写入权限,并提供相应的代码示例。

请求外部文件写入权限

在 Android 12 中,要请求外部文件写入权限,我们需要在 AndroidManifest.xml 文件中声明相应的权限:

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

同时,在运行时,我们需要请求用户授权:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
}

当用户授予权限后,我们就可以在应用程序中访问外部存储空间并写入文件。

示例代码

下面是一个简单的示例代码,演示了如何请求外部文件写入权限并在外部存储空间中写入文件:

public class MainActivity extends AppCompatActivity {

    private static final int WRITE_EXTERNAL_STORAGE_REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_REQUEST_CODE);
        } else {
            writeToFile();
        }
    }

    private void writeToFile() {
        File file = new File(Environment.getExternalStorageDirectory(), "example.txt");
        try {
            FileWriter writer = new FileWriter(file);
            writer.write("Hello, world!");
            writer.close();
            Toast.makeText(this, "File written successfully!", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this, "Failed to write file!", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == WRITE_EXTERNAL_STORAGE_REQUEST_CODE) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                writeToFile();
            } else {
                Toast.makeText(this, "Permission denied!", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

在上面的代码中,我们首先检查是否已经获得了外部文件写入权限。如果没有,我们就请求用户授权。在用户授权后,我们调用 writeToFile() 方法来在外部存储空间中写入文件。如果用户拒绝授权,我们显示一个提示信息。

总结

在 Android 12 中,外部文件写入权限的限制使得应用程序在访问外部存储空间时需要获得用户的授权。通过在 AndroidManifest.xml 中声明权限,并在运行时请求用户授权,我们可以在应用程序中访问外部存储空间并写入文件。通过上面的示例代码,我们可以了解如何请求外部文件写入权限并在外部存储空间中写入文件。希望本文对您有所帮助!

关系图

erDiagram
    USER {
        int user_id
        string username
        string email
    }
    FILE {
        int file_id
        string filename
        int user_id
    }
    USER ||--|| FILE : owns

通过上述的关系图,我们可以看到用户拥有文件的关系,每个文件都属于特定的用户。

参考文献

  • [Requesting Write External Storage Permission in Android with Kotlin](

  • [Android Developers - Request App Permissions](

  • [Android Developers - Writing and Reading Files](

结尾

本文介绍了在 Android 12 中请求外部文件写入权限的方法,并提供了相应的代码示例。通过请求用户授权并在用户授权后进行文件写入操作,我们可以在应用程序中访问外部存储空间并写入文件。希望本文对您有所帮助,谢谢阅读!