> Java > java지도 시간 > Android Marshmallow 이상에서 디렉터리 생성 문제를 해결하는 방법

Android Marshmallow 이상에서 디렉터리 생성 문제를 해결하는 방법

Linda Hamilton
풀어 주다: 2024-10-24 03:25:31
원래의
420명이 탐색했습니다.

How to Resolve Directory Creation Issues in Android Marshmallow and Beyond

Android Marshmallow 및 그 이후 버전의 디렉터리 생성 문제

Android Marshmallow는 애플리케이션이 파일 시스템과 상호 작용하는 방식에 상당한 변화를 가져왔습니다. 일부 기본 응용 프로그램에 대한 디렉터리 생성. Marshmallow에서 디렉토리를 생성하려고 할 때 일부 사용자는 일관되지 않은 동작을 경험하며 작업이 때때로 작동하고 다른 작업은 실패합니다.

문제 이해

이 문제의 근본 원인 문제는 Android의 새로운 SAF(Storage Access Framework)에 있습니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿