Heim  >  Artikel  >  Java  >  So lösen Sie Probleme bei der Verzeichniserstellung in Android Marshmallow und darüber hinaus

So lösen Sie Probleme bei der Verzeichniserstellung in Android Marshmallow und darüber hinaus

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 03:25:31331Durchsuche

How to Resolve Directory Creation Issues in Android Marshmallow and Beyond

Probleme bei der Verzeichniserstellung in Android Marshmallow und darüber hinaus

Android Marshmallow hat wesentliche Änderungen an der Art und Weise eingeführt, wie Anwendungen mit dem Dateisystem interagieren, was zu Problemen mit Verzeichniserstellung für einige native Anwendungen. Beim Versuch, ein Verzeichnis in Marshmallow zu erstellen, stellen einige Benutzer ein inkonsistentes Verhalten fest, wobei der Vorgang manchmal funktioniert und bei anderen fehlschlägt.

Verstehen des Problems

Die Hauptursache dafür Das Problem liegt im neuen Storage Access Framework (SAF) von Android. Vor Marshmallow hatten Anwendungen uneingeschränkten Zugriff auf den internen und externen Speicher und konnten so Verzeichnisse frei erstellen.

SAF führt jedoch Berechtigungen ein, die den Schreibzugriff auf den externen Speicher standardmäßig einschränken. Daher müssen Anwendungen explizit Schreibberechtigungen anfordern, bevor sie versuchen, Verzeichnisse auf dem externen Speicher zu erstellen.

Lösung: Schreibberechtigung anfordern

Um das Problem bei der Verzeichniserstellung zu beheben, Anwendungen müssen die Berechtigung WRITE_EXTERNAL_STORAGE vom Benutzer anfordern, bevor sie versuchen, Verzeichnisse zu erstellen. Diese Berechtigung stellt sicher, dass die Anwendung über die erforderliche Berechtigung zum Ändern des externen Speichers verfügt.

Hier ist ein Beispielcode, der zeigt, wie die Speicherschreibberechtigung angefordert und überprüft wird:

<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>

Sobald die Wenn die Berechtigung erteilt wird, können Anwendungen mit der mkdirs()-Methode Verzeichnisse erstellen, ohne dass Probleme auftreten. Durch die Implementierung dieser Lösung können Entwickler sicherstellen, dass ihre Anwendungen zuverlässig Verzeichnisse in Android Marshmallow und späteren Versionen erstellen können.

Das obige ist der detaillierte Inhalt vonSo lösen Sie Probleme bei der Verzeichniserstellung in Android Marshmallow und darüber hinaus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn