2017-03-01 5 views
0

장치에서 pdf 파일을 선택하여 서버에 업로드하려고합니다. ACTION_GET_CONTENT은 장치에서 pdf를 선택하는 데 사용됩니다.Uri of`ACTION_GET_CONTENT`을 사용하여 파일을 만들 수 없습니다.

sel_book.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(); 
      intent.setType("application/pdf"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent, "Select PDF"), 1); 
     } 
    }); 

활동 결과에 대해 Uri이 (가) 문자열로 저장됩니다.

public void onActivityResult(int requestCode, int resultCode, Intent result) { 
    if (resultCode == RESULT_OK) { 
     if (requestCode == 1) { 
      Uri uri = result.getData(); 
      String uriString = uri.toString(); 
      File myFile = new File(uriString); 
      path = myFile.getAbsolutePath(); 
     } 
    } 
} 

결과 경로는 /document/primary:Download/Aptitude_2016_17.pdf입니다. 새 파일을 만들 때이 파일을 사용해야합니다. File selectedFile = new File(selectedFilePath);. 그러나 File을 생성하지는 않습니다. selectedFile.isFile()은 false를 반환합니다. 왜 그런지 모르겠습니다. 이 문제를 해결하도록 도와주세요. 미리 감사드립니다.

답변

1

ACTION_GET_CONTENT는 (는) 기기에서 PDF를 선택하는 데 사용됩니다.

이렇게하면 사용자가 콘텐츠를 선택할 수 있습니다. 파일 일 필요는 없습니다.

활동 결과에서 Uri을 가져 와서이를 String으로 저장합니다.

이것은 Uri을 사용하는 방식이 아닙니다.

경로가 /document/primary:Download/Aptitude_2016_17.pdf가됩니다.

이는 파일 시스템 경로가 아닙니다. 이는 content 구성표가있는 Uri의 일부입니다. ACTION_GET_CONTENT에서 파일을 가져올 수 없습니다. 콘텐츠를 가리키는 Uri이 표시됩니다. (A file 계획

  • 파일,하지만 하나의 당신이 할 수없는 액세스 할 수있는 Uri 통해

    • 액세스 할 수있는 파일 : 그 Uri은 사용자와 다른 프로그램이을 선택 아무것도 가리 수 예를 들어, 다른 응용 프로그램의 내장 스토리지) 데이터베이스
    • 에 너무
    • 그리고 다운로드 할 필요가 컨텐츠의 조각에서 BLOB 컬럼의
    • 내용에

    ContentResovleropenInputStream()을 사용하면 내용이 무엇이든간에 스트림을 얻을 수 있습니다. 직접 (이 내용을 업로드하는 데 사용하는 것과 함께) 직접 사용하거나 해당 스트림을 사용하여 해당 내용의 복사본을 사용하여 자신 만의 파일을 만들어 사용할 수있는 파일을 만드십시오.

  • +0

    감사합니다. 내가 선택한 파일 시스템 경로를 얻을 수 있도록 도와 주시겠습니까? – Choxmi

    +0

    @Choxmi : ** 파일 시스템 경로는 없습니다 **. 거기에있는 유일한 방법은'ContentResolver'와'openInputStream()'을 사용하여 자신의 파일을 만들고, 제어하는 ​​일부 파일에'FileOutputStream'을 결합하는 것입니다. 그런 다음 표준 Java 입출력을 사용하여 입력 스트림에서 출력 스트림으로 복사하십시오. 그런 다음 원하는 용도로 사용할 수있는 콘텐츠가 포함 된 파일을 보유하게됩니다. 파일을 다 마쳤 으면 언제든지 파일을 삭제하십시오. – CommonsWare

    +0

    알았어요. 답장 해주셔서 매우 감사합니다. – Choxmi