2017-05-02 15 views
0

내 응용 프로그램의 내부 저장소에있는 모든 비디오 파일 이름을 표시하려고합니다.내부 저장소 파일을 listview에 표시하는 방법은 무엇입니까?

환경 .getExternalStorageDirectory : -이 시도했습니다. 또한 먼저 ExternalStorageState null을 확인합니다.

내 장치에 현재 sdcard가 없습니다. 처리 방법은 무엇입니까? P. 전 Moto G (2 판) 장치를 사용하고 있습니다.

나는 시도했다 : -

How to display files in listView?

How to get android device with Internal Downloader folder path

+0

검색 문자열 배열로리스트 뷰를 채우는 방법을 검색 할 수 있습니다. 우리는 당신의 코드에서 문제를 해결할 수 있도록 도와줍니다. – Denny

+0

@Denny : - 모든 파일을 가져올 수 없습니다 .2 개의 파일을 에뮬레이션하고 자체적으로 가져 왔습니다. 나는 다른 폴더에있는 모든 파일을 원한다. 당신의 제안에 따라 나는 이것을 시도했다. http://stackoverflow.com/questions/37022683/how-to-read-file-names-from-internal-storage-in-android –

+0

내부 저장소에 대해 염두에 두어야 할 점이 명확하지 않습니다. 명시 해주세요. – greenapps

답변

0

이 난 내부 저장 파일에 액세스 할 수 있습니다 내 시도이다. 나는 내부 저장 디렉토리에 액세스 할 수 없습니다 나처럼> (23) 때문에이 권한 문제 API 레벨에서 권한을 사용하는 방법에 대한 중요한 정보를 가지고 위의 링크에서

https://developer.android.com/training/permissions/requesting.html

.

최종 코드 : -

public class MainActivity extends Activity { 

ListView lv; 
private static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 1; 

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

    lv = (ListView) findViewById(R.id.list); 


    if (ContextCompat.checkSelfPermission(MainActivity.this, 
      Manifest.permission.READ_EXTERNAL_STORAGE) 
      != PackageManager.PERMISSION_GRANTED) { 

     // Should we show an explanation? 
     if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, 
       Manifest.permission.READ_EXTERNAL_STORAGE)) { 


     } else { 

      // No explanation needed, we can request the permission. 

      ActivityCompat.requestPermissions(MainActivity.this, 
        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
        MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

      // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
      // app-defined int constant. The callback method gets the 
      // result of the request. 


     } 
    } else { 

     ArrayList<String> filesinfolder = GetFiles("/sdcard/"); 
     ArrayAdapter<String> adapter 
       = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       filesinfolder); 

     lv.setAdapter(adapter); 


    } 


} 


@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       ArrayList<String> filesinfolder = GetFiles("/sdcard/"); 
       ArrayAdapter<String> adapter 
         = new ArrayAdapter<String>(this, 
         android.R.layout.simple_list_item_1, 
         filesinfolder); 

       lv.setAdapter(adapter); 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 


public ArrayList<String> GetFiles(String directorypath) { 
    ArrayList<String> Myfiles = new ArrayList<String>(); 
    File f = new File(directorypath); 
    f.mkdirs(); 
    File[] files = f.listFiles(); 
    if (files.length == 0) { 
     return null; 
    } else { 
     for (int i = 0; i < files.length; i++) 
      Myfiles.add(files[i].getName()); 
    } 
    return Myfiles; 
} 

} 그 후 저장에서 파일 이름을 검색하는 방법을 인터넷에