2016-07-11 1 views
1

코드가 이전 버전과 완전히 호환되었지만 이전 Android 6 기기에서도 정상적으로 작동하지만 Nexus 5, 6.0.1에서는 외부 저장소의 데이터에 액세스 할 수 없습니다. . 외부 저장소를 읽을 때 파일을 찾을 수 없습니다.

그것은 파일을 찾을 수 없습니다 예외

java.io.FileNotFoundException 보여줍니다 열기 실패 : ENOENT// 0/다운로드/********/*****를/저장 에뮬레이트 (해당 파일이나 디렉토리가 없음)

스토리지에 데이터를 쓰려면 런타임 저장 권한이 필요하며 그 부분은 문제가없는 것 같습니다.

답변

1

Pre-Marshmallow 기기에서 코드가 정상적으로 작동하므로 앱에 런타임 권한을 추가하지 않은 것처럼 보입니다. 워드 프로세서에서 언급 한 바와 같이

Android M에서 시작, 당신은 런타임에 권한을 요청해야합니다 응용 프로그램이 실행되는 동안

는 안드로이드 6.0부터 (API 레벨 23), 사용자가 응용 프로그램에 권한을 부여, 앱을 설치할 때가 아닙니다.

더 읽기에 대한 당신의 주요 활동의 onCreate() 방법이 확인 안드로이드 here

+0

안녕하세요. Ashish, 런타임 권한을 요청했으며 그 부분이 정상적으로 작동합니다. 앱을 처음 시작할 때 명시 적으로 쓰기 권한이 있는지 묻습니다. – frgr

1

을 실행에서 권한을 요청 :

if (currentapiVersion > android.os.Build.VERSION_CODES.LOLLIPOP){ 
    // Do something for lollipop and above versions 
    checkPermission(); 
    if (!checkPermission()) { 
     requestPermission(); 
    } 
} 

을 그리고이 코드 아웃 사이드 onCreate() :

private boolean checkPermission(){ 
    int result = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION); 
    if (result == PackageManager.PERMISSION_GRANTED){ 
     return true; 
    } else { 
     return false; 
    } 
} 

private void requestPermission(){ 
    ActivityCompat.requestPermissions(activity,new String[]{ 
     Manifest.permission.ACCESS_FINE_LOCATION, 
     Manifest.permission.ACCESS_COARSE_LOCATION, 
     Manifest.permission.CAMERA, 
     Manifest.permission.WRITE_EXTERNAL_STORAGE, 
     Manifest.permission.CALL_PHONE},PERMISSION_REQUEST_CODE 
    ); 
} 

이 코드는 버전이 Lollipop OS보다 높은지 여부를 확인합니다. 그렇다면 앱을로드하는 동안 사용자에게 권한을 요청합니다.

희망이 있으면 도움이 될 것입니다. 테스트 됨. 제대로 작동합니다.

+0

안녕하세요. Gaurang, 저는 이미 외부 저장소에 쓰기 권한을 얻기 위해 런타임 권한 부분을 구현했습니다. – frgr

관련 문제