web-dev-qa-db-ja.com

Android Intentを使用してファイルを選択する方法

このコードを使用して、Intentを使用して任意のタイプのファイルを選択し、アプリケーションでそのパスを取得します

    //this when button click
public void onBrowse(View view) {
    Intent chooseFile;
    Intent intent;
    chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
    chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
    chooseFile.setType("file/*");
    intent = Intent.createChooser(chooseFile, "Choose a file");
    startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) return;
    String path     = "";
    if(requestCode == ACTIVITY_CHOOSE_FILE)
    {
        Uri uri = data.getData();
        String FilePath = getRealPathFromURI(uri); // should the path be here in this string
        System.out.print("Path  = " + FilePath);
    }
}

public String getRealPathFromURI(Uri contentUri) {
    String [] proj      = {MediaStore.Images.Media.DATA};
    Cursor cursor       = getContentResolver().query( contentUri, proj, null, null,null);
    if (cursor == null) return null;
    int column_index    = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

ファイルブラウザーを開いたときに問題が発生し、ファイルを選択できない場合は、ファイルを押しても有効になっていないようです。何も起こらなかったため、このコードの何が問題になっていますか
i Android mobileからスクリーンショットをアップロードします
画像
前もって感謝します

8
user7179690

ファイルのタイプは.txtです

次に、text/plainをMIMEタイプとして使用します。 Ian Lakeがコメントで述べたように、file/*は有効なMIMEタイプではありません。

さらに、getRealPathFromURI()を削除します(機能しません)。 Uri自体を超えるパスはありません。 UriopenInputStream()を呼び出すと、このContentResolverで識別されるコンテンツを読み取ることができ、getContentResolver()を呼び出すとContentResolverを取得できますあなたのActivity

8
CommonsWare

行を変更します。

chooseFile.setType("file/*");

chooseFile.setType( "*/ *");

これは、任意のタイプのファイルを選択するのに役立ちます。

それがうまくいくことを願っています。

8
Jessy Swan