삼성 SM-T350에서 Marshmellow 6.0.1을 실행 중이고 외부 sd 카드 (/ mnt/media_rw/38E5- 07B6).Android 6.0.1 외부 SD 카드 읽기/쓰기
의 AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
내가 런타임에 허가를 요청하고 사용자가 그들에게 부여합니다. 나는 이것을 시스템 환경 설정에서 다시 확인할 수있다. 코드에서 계속하기 전에 사용자에게 권한이 부여되었는지 확인합니다. 나는이 같은 외부 SD 카드에 기록 할 때
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], int[] grantResults) {
check against PackageManager.PERMISSION_GRANTED
}
:
java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:939)
at com.myapp.util.FileUtils.copyFile(FileUtils.java:42)
at com.myapp.service.ExportService$1.onClick(ExportService.java:47)
at android.view.View.performClick(View.java:5714)
at android.widget.TextView.performClick(TextView.java:10926)
at android.view.View$PerformClick.run(View.java:22589)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at java.io.File.createNewFile(File.java:932)
at com.myapp.util.FileUtils.copyFile(FileUtils.java:42)
at com.myapp.service.ExportService$1.onClick(ExportService.java:47)
at android.view.View.performClick(View.java:5714)
at android.widget.TextView.performClick(TextView.java:10926)
at android.view.View$PerformClick.run(View.java:22589)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
내가 ADB 쉘 장치를 장착 할 때 내가 PID를 잡아 :
File exportFile = new File("/mnt/media_rw/38E5-07B6/junk.txt");
exportFile.createNewFile();
나는이를 얻을 수/proc/{pid}/status를 덤프하면 내 사용자에게 SD 카드에 쓰기 위해 필요한 AID_SDCARD_RW (1015) 권한이 없다는 것을 알 수 있습니다.
Groups: 3003 9997 50143
가 나는 또한 /system/etc/permissions/permissions.xml
<permission name="android.permission.WRITE_MEDIA_STORAGE" >
<group gid="media_rw" />
<group gid="sdcard_rw" />
</permission>
이를 찾을 수 없습니다 android.permission.WRITE_EXTERNAL_STORAGE이 없지만, 권한이있다 : android.permission.WRITE_MEDIA_STORAGE
그럼에도 불구하고 내 질문은 다음과 같습니다. 허가가 매니페스트에있는 곳에이 문제가 발생하여 의 새로운 권한 모델에 대한 변경을했는데 여전히 th에 쓸 수 없습니다. SD 카드? 어떻게해야할까요? (뿌리 뽑기가 필요 없기 때문에) 이것이 작동하도록하려면 어떻게해야합니까?
첫 번째 : 는 이미 질문에 있습니다 –
whatthemess
셋째 : 이것은 사실이 아닙니다. ES 파일 탐색기 (https://play.google.com/store/apps/details?id=com.estrongs.android.pop&hl=en)는 SD 카드의 어느 위치 에나 쓸 수 있으며 타사 앱입니다 넷째 : 나는 허가를 요청했다. 그리고 권한을 두 번 확인했습니다. > 런타임에 권한을 요청하고 사용자가 권한을 부여합니다. 나는 이것을 시스템 환경 설정에서 다시 확인할 수있다. 코드에서 계속하기 전에 사용자에게 권한이 부여되었는지 확인합니다. 다시 질문에 대답 – whatthemess
둘째 : 나는 adb로 연결하고 마운트 명령을 실행하고 카드 ID를 볼 수 있기 때문에 마운트 포인트가 옳다는 것을 알고있다 – whatthemess