Android Marshmallow 以降でのディレクトリ作成の問題
Android Marshmallow では、アプリケーションがファイル システムと対話する方法に大幅な変更が導入され、次の問題が発生しました。一部のネイティブ アプリケーションのディレクトリ作成。 Marshmallow でディレクトリを作成しようとすると、一部のユーザーは操作が正常に動作することもあれば失敗するなど、一貫性のない動作を経験します。
問題の理解
この根本原因問題は Android の新しい Storage Access Framework (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 中国語 Web サイトの他の関連記事を参照してください。