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中文網其他相關文章!