web-dev-qa-db-ja.com

Androidのインテントを介して任意の種類のファイルを選択します

あらゆる種類のファイルを返すことができるアプリのインテントチューザーを開始したい

現在使用しています(添付ファイルのAndroidメールソースコードからコピーしたもの)

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
Intent i = Intent.createChooser(intent, "File");
startActivityForResult(i, CHOOSE_FILE_REQUESTCODE);

ただし、Galaxy S2では「ギャラリー」と「音楽プレーヤー」のみが表示されます。このデバイスにはエクスプローラーがあり、リストに表示したいと思います。また、カメラアプリをリストに表示して、ユーザーが写真を撮影してアプリから送信できるようにします。 Astroファイルマネージャーをインストールすると、その意図にも対応します。私の顧客はGalaxy SIIの所有者のみであり、既に基本的で十分なファイルマネージャーを持っていることを考えれば、Astroファイルマネージャーを強制的にインストールしたくありません。

どうすればこれを達成できますか?このようなメニューにファイルを選択するためのデフォルトのファイルマネージャーが表示されているのは確かですが、どのアプリで覚えているかはわかりません。

82
ErGo_404

カメラ用ではなく、他のファイル用。

私のデバイスにはES File Explorerがインストールされており、これは私の場合に簡単に機能します。

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_REQUEST_CODE);
76
user370305

Samsungファイルエクスプローラーには、カスタムアクション(com.sec.Android.app.myfiles.PICK_DATA)だけでなく、カテゴリパート(Intent .CATEGORY_DEFAULT)およびmime-typeが必要です追加として渡されます。

Intent intent = new Intent("com.sec.Android.app.myfiles.PICK_DATA");
intent.putExtra("CONTENT_TYPE", "*/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);

また、このアクションを使用して複数のファイルを開くこともできます。com.sec.Android.app.myfiles.PICK_DATA_MULTIPLEとにかく、サムスンや他のデバイスで動作する私のソリューションです:

public void openFile(String mimeType) {

        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType(mimeType);
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        // special intent for Samsung file manager
        Intent sIntent = new Intent("com.sec.Android.app.myfiles.PICK_DATA");
         // if you want any file type, you can skip next line 
        sIntent.putExtra("CONTENT_TYPE", mimeType); 
        sIntent.addCategory(Intent.CATEGORY_DEFAULT);

        Intent chooserIntent;
        if (getPackageManager().resolveActivity(sIntent, 0) != null){
            // it is device with Samsung file manager
            chooserIntent = Intent.createChooser(sIntent, "Open file");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { intent});
        } else {
            chooserIntent = Intent.createChooser(intent, "Open file");
        }

        try {
            startActivityForResult(chooserIntent, CHOOSE_FILE_REQUESTCODE);
        } catch (Android.content.ActivityNotFoundException ex) {
            Toast.makeText(getApplicationContext(), "No suitable File Manager was found.", Toast.LENGTH_SHORT).show();
        }
    }

このソリューションは私にとってはうまく機能し、おそらく他の誰かにとっても役に立つでしょう。

44
Chupik

ギャラクシーでのこの作業は、ショーの連絡先、デバイスにインストールされたファイルマネージャー、ギャラリー、音楽プレーヤーに注意してください

private void openFile(Int  CODE) {
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.setType("*/*");
    startActivityForResult(intent, CODE);
}

ここで、アクティビティのonActivityResultのパスを取得します。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     String Fpath = data.getDataString();
    // do somthing...
    super.onActivityResult(requestCode, resultCode, data);

}
37
alireza

Samsungファイルエクスプローラーがカスタムアクションを使用することが判明しました。これが、サムスンのアプリではなく、サムスンのアプリからファイルを検索するときに、サムスンのファイルエクスプローラーを見ることができる理由です。

アクションは「com.sec.Android.app.myfiles.PICK_DATA」です

両方のインテントをフィルタリングするアクティビティを表示するカスタムアクティビティピッカーを作成しました。

1
ErGo_404