首页 >Java >java教程 >如何解决 Android Marshmallow 及其他版本中的目录创建问题

如何解决 Android Marshmallow 及其他版本中的目录创建问题

Linda Hamilton
Linda Hamilton原创
2024-10-24 03:25:31416浏览

How to Resolve Directory Creation Issues in Android Marshmallow and Beyond

Android Marshmallow 及其他版本中的目录创建问题

Android Marshmallow 对应用程序与文件系统交互的方式进行了重大更改,导致出现问题一些本机应用程序的目录创建。尝试在 Marshmallow 中创建目录时,某些用户会遇到不一致的行为,操作有时有效,有时失败。

了解问题

此问题的根本原因问题出在Android新的存储访问框架(SAF)上。在 Marshmallow 之前,应用程序对内部和外部存储的访问不受限制,允许它们自由创建目录。

但是,SAF 默认引入了限制对外部存储的写访问的权限。因此,应用程序在尝试在外部存储上创建目录之前必须显式请求写入权限。

解决方案:请求写入权限

要解决目录创建问题,应用程序在尝试创建目录之前必须向用户请求 WRITE_EXTERNAL_STORAGE 权限。此权限可确保应用程序拥有修改外部存储所需的权限。

以下示例代码展示了如何请求和检查存储写入权限:

<code class="java">import android.Manifest;
import android.content.pm.PackageManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;


public class MyDevIDS extends AppCompatActivity {

        private static final int REQUEST_RUNTIME_PERMISSION = 123;

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

            if (CheckPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
                // you have permission go ahead
                createApplicationFolder();
            } else {
                // you do not have permission go request runtime permissions
                RequestPermission(MyDevIDS.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, REQUEST_RUNTIME_PERMISSION);
            }
        }

        @Override
        public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {

            switch (permsRequestCode) {

                case REQUEST_RUNTIME_PERMISSION: {
                    if (grantResults.length > 0
                            &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        // you have permission go ahead
                        createApplicationFolder();
                    } else {
                        // you do not have permission show toast.
                    }
                    return;
                }
            }
        }

        public void RequestPermission(Activity thisActivity, String Permission, int Code) {
            if (ContextCompat.checkSelfPermission(thisActivity,
                    Permission)
                    != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                        Permission)) {
                } else {
                    ActivityCompat.requestPermissions(thisActivity,
                            new String[]{Permission},
                            Code);
                }
            }
        }

        public boolean CheckPermission(Context context, String Permission) {
            if (ContextCompat.checkSelfPermission(context,
                    Permission) == PackageManager.PERMISSION_GRANTED) {
                return true;
            } else {
                return false;
            }
        }
    }</code>

一旦授予权限后,应用程序可以继续使用 mkdirs() 方法创建目录,而不会遇到问题。通过实施此解决方案,开发人员可以确保他们的应用程序能够在 Android Marshmallow 及更高版本中可靠地创建目录。

以上是如何解决 Android Marshmallow 及其他版本中的目录创建问题的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn