2017-02-28 12 views
-1

다운로드 폴더와 같이 Android 휴대 전화의 내부 저장 공간에 액세스해야하는 앱이 있습니다. 그러나 그 파일을 나열하려고 할 때"/ sdcard /"의 파일을 나열하면 null이 반환됩니까?

java.io.File; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class Main extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     File root = new File("/"); // Works 
     File mnt = new File("/mnt/"); // Works 
     File mnt2 = new File("/mnt/m_internal_storage"); // Crashes 
     File cus = new File("/custom/"); // Works 
     File f = new File("/sdcard/"); // Crashes 
     String[] s = f.list(); 
     for (int x = 0; x < s.length; x++) { 
      Log.println(Log.ASSERT, "#", s[x]); 
     } 
    } 
} 

이 코드는 디렉토리의 모든 파일을 인쇄합니다. 그것은 rootmnt & cus 작동하지만 snull 배열을 반환 f & mnt2의 목록을하려고 할 때 충돌이 발생합니다. 내부 파일 저장소에 어떻게 액세스합니까?

나는 또한 대부분의 실패와 함께 Environment의 기능을 사용해 보았고 외장형 스토리지에 대한 읽기/쓰기 권한도 있습니다.

7.0 용으로 컴파일. API (23) 최소 SDK의 API를 대상으로 18

답변

1

I는 다운로드 폴더로 안드로이드 휴대 전화의 내부 저장 장치에 접근 할 필요가있는 응용 프로그램을 가지고있다.

사용자가 볼 수있는 Download 폴더는 Android SDK가 external storage이라고 부르는 폴더에 있습니다.

내부 파일 저장소에 어떻게 액세스합니까?

Environment.getExternalStorageDirectory()을 사용하십시오. 절대 하드 코드 경로. 예를 들어, 행성의 표면에있는 장치가 거의 없으면 /mnt/m_internal_storage, /custom/ 또는 /sdacard/입니다.

환경의 기능을 대부분 사용하지 못했습니다. 외장형 스토리지에 대한 읽기/쓰기 권한도 있습니다.

아마도 runtime permissions을 구현하지 않았습니다.

+1

프로그래밍을 사용하지 않고 휴대 전화의 파일을 보려면 파일 탐색을 사용하고 있습니다. 휴대 전화에는 내부 다운로드 폴더와 외부 폴더가 있습니다. 내가 말했듯이'환경'이 작동하지 않고 나는 extact dir을 알리기 위해 하드 코드를 사용하고 있었다.셋째, 내부 저장소에 대한 R/W에 대한 런타임 권한이 필요합니까? –

+1

https://developer.android.com/training/basics/data-storage/files.html#WriteInternalStorage에는 내부 저장소에 대한 사용 권한이 필요하지 않습니다. –

+1

또한'/ sdacard /'는 오타였습니다. –

1

코드에 "File f = new File ("/ sdacard/"); //"충돌 "/"sdcard/"이어야합니다.

+0

그것은이 질문을 쓰는 데 단지 오타 였지만 여전히 변함이 없습니다. –

1

앱의 내부 파일을 원하는 경우는,

/sdcard/data/data/pack_name/files/fileName 

당신이 런타임을 요구해야 할이 아닌 다른이

File p = getApplicationContext().getFileStreamPath("FileName"); 

편집 처럼 접근 할 필요가 app.package 의미 권한 및 다운로드 경로가 내부 저장소가 아닙니다! 그것은 외부로 정의됩니다. 일반 사용자가 파일 관리자에서 (루트 권한없이) 액세스 할 수있는 모든 것은 외부 저장소입니다. 내부 저장 장치는 내부 sdcard 및 micro sdcard와 다릅니다. 내부 저장소는 UR 패키지에 속합니다. 읽기 : https://developer.android.com/guide/topics/permissions/requesting.html

+1

그게 내가 원하는 건 아니에요, 크롬 다운로드 파일과 같은 앱에 내부 다운로드 폴더가 필요합니다. –

+1

수정 된 답변을 확인하고 허락을 요청하십시오. –