Android Marshmallow 以降でのディレクトリ作成の問題を解決する方法

Linda Hamilton
リリース: 2024-10-24 03:25:31
オリジナル
411 人が閲覧しました

How to Resolve Directory Creation Issues in Android Marshmallow and Beyond

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
                            &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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート