2017-08-11 135 views
1

在我的應用程序中,我想在選擇的目錄中創建子目錄。我使用SAF(存儲訪問框架):選擇目錄並創建一個子目錄工作正常。如何使用URI(Android)創建目錄?

選擇目錄:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); 
startActivityForResult(intent, REQUEST_CODE_PATH_TO_DATA); 

下創建子目錄:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode != Activity.RESULT_OK) { 
     return; 
    } 

    if (requestCode == REQUEST_CODE_PATH_TO_DATA) { 
     if (data == null) { 
      return; 
     } 

     DocumentFile pickedDir = DocumentFile.fromTreeUri(getActivity(), data.getData()); 
     getActivity().grantUriPermission(getActivity().getPackageName(), data.getData(), Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     getActivity().getContentResolver().takePersistableUriPermission(data.getData(), Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     pickedDir.createDirectory("Portfolio"); 
     String pathToPickedDir = ""; 
     for (DocumentFile file : pickedDir.listFiles()) { 
      if (file.isDirectory() && file.getName().endsWith("Portfolio")) { 
       pathToPickedDir = file.getUri().toString(); 
      } 
     } 
    } 
} 

URI從pickedDir是:

content://com.android.externalstorage.documents/tree/314E-7741%3ADCIM 

而且從創建子目錄 「投資組合」 URI是:

content://com.android.externalstorage.documents/tree/314E-7741%3ADCIM/document/314E-7741%3ADCIM%2FPortfolio 

然後,當我嘗試在「Portfolio」中創建子目錄時,我無法做到這一點,因爲目錄是在最初選擇的文件夾中創建的,而不是在「Portfolio」文件夾中。

DocumentFile pickedDir = DocumentFile.fromTreeUri(getActivity(), pathToPickedDir); 
pickedDir.createDirectory("Patient"); 

我在做什麼錯?感謝您的幫助。

回答

1

只是我發現使用 「爲」 循環方式:

 for (DocumentFile file : pickedDir.listFiles()) { 
      if (file.isDirectory() && file.getName().equals("Portfolio")) { 
       file.createDirectory("Subdirectory"); 
      } 
     }