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 && 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!