あらゆる種類のファイルを返すことができるアプリのインテントチューザーを開始したい
現在使用しています(添付ファイルの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ファイルマネージャーを強制的にインストールしたくありません。
どうすればこれを達成できますか?このようなメニューにファイルを選択するためのデフォルトのファイルマネージャーが表示されているのは確かですが、どのアプリで覚えているかはわかりません。
カメラ用ではなく、他のファイル用。
私のデバイスにはES File Explorer
がインストールされており、これは私の場合に簡単に機能します。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_REQUEST_CODE);
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();
}
}
このソリューションは私にとってはうまく機能し、おそらく他の誰かにとっても役に立つでしょう。
ギャラクシーでのこの作業は、ショーの連絡先、デバイスにインストールされたファイルマネージャー、ギャラリー、音楽プレーヤーに注意してください
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);
}
Samsungファイルエクスプローラーがカスタムアクションを使用することが判明しました。これが、サムスンのアプリではなく、サムスンのアプリからファイルを検索するときに、サムスンのファイルエクスプローラーを見ることができる理由です。
アクションは「com.sec.Android.app.myfiles.PICK_DATA」です
両方のインテントをフィルタリングするアクティビティを表示するカスタムアクティビティピッカーを作成しました。