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 && 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中文网其他相关文章!