2017-03-01 5 views
0

デバイスからpdfファイルを選択してサーバーにアップロードしようとしています。 ACTION_GET_CONTENTは、デバイスからpdfを選択するために使用されます。「ACTION_GET_CONTENT」のUriを使用してファイルを作成できません

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を選択するために使用されます。

これにより、ユーザーは1つのコンテンツを選択できます。それはファイルである必要はありません。

私はUriを取得して文字列として保存します。

これは、Uriの使用方法ではありません。

この結果、パスは/document/primary:Download/Aptitude_2016_17.pdfになります。

これはファイルシステムのパスではありません。これは、contentスキームを持つUriの一部です。あなたはACTION_GET_CONTENTからファイルを取得しません。コンテンツを指すUriが表示されます。 (fileスキーム

  • ファイル、しかし、1つのことができていないアクセスをUriを経て、

    • あなたがアクセスできるファイル:それUriは、ユーザーや他のアプリがを選択何を指している可能性があり例えば、他のアプリの内部ストレージに)
    • データベース
    • そしてそうにダウンロードする必要があるコンテンツの一部でBLOB列の内容

    ContentResovleropenInputStream()を使用して、内容が何であれストリームを取得します。そのコンテンツを直接使用するか(このコンテンツのアップロードに使用しているものを使用)、またはそのストリームを使用して、そのコンテンツのコピーを使用して独自のファイルを作成し、使用できるファイルを作成します。

  • +0

    ありがとうございました。選択したファイルシステムのファイルシステムパスを取得する手助けをしてください。 – Choxmi

    +0

    @Choxmi:**ファイルシステムのパスはありません**。そこに存在する唯一の方法は、 'ContentResolver'と' openInputStream() 'とあなたがコントロールするファイルに' FileOutputStream'を組み合わせて独自のファイルを作成する場合です。次に、標準Java入出力を使用して入力ストリームから出力ストリームにコピーします。それで、あなたは、あなたが望むどんな目的にでも使うことができる、あなた自身のファイルを持っています。完了したら、ファイルを削除してください。 – CommonsWare

    +0

    入手しました。ご返事ありがとうございます。 – Choxmi

    関連する問題