84

これは簡単だと思っていましたが、残念ながらそうではありませんでした。

私が持っているもの:

外部ストレージに「myFolder」というフォルダーがあります(Nexus 4なのでSDカードではありませんが、問題にはなりません)。フォルダにはいくつかの*.csvファイルが含まれています。

私が欲しいもの:

次のことを行うメソッドを書きたいと思います: 1 つを選択できるさまざまなアプリ (ファイル ブラウザー) を表示します (図を参照)。クリックすると、選択したファイル ブラウザが起動し、「myFolder」の内容が表示されます。それ以上でもそれ以下でもありません。

ここに画像の説明を入力

私の質問:

どうすれば正確にそれを行うことができますか?次のコードにかなり近づいたと思いますが、何をしても、まだ正しくないことがあるに違いありません-常に外部ストレージからメインフォルダーのみを開きます。

public void openFolder()
{
File file = new File(Environment.getExternalStorageDirectory(),
    "myFolder");

Log.d("path", file.toString());

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setDataAndType(Uri.fromFile(file), "*/*");
startActivity(intent);
}
4

11 に答える 11

76

これはあなたを助けるはずです:

Uri selectedUri = Uri.parse(Environment.getExternalStorageDirectory() + "/myFolder/");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(selectedUri, "resource/folder");

if (intent.resolveActivityInfo(getPackageManager(), 0) != null)
{
    startActivity(intent);
}
else
{
    // if you reach this place, it means there is no any file 
    // explorer app installed on your device
}

デバイスにファイル エクスプローラー アプリがインストールされていることを確認してください。

編集:コメントからシャンタヌの推奨事項を追加しました。

ライブラリ:現在の解決策が役に立たない場合は、次のライブラリhttps://android-arsenal.com/tag/35を参照することもできます。

于 2014-10-30T11:30:13.690 に答える
47

私はついにそれを働かせました。このようにして、セレクターにはいくつかのアプリ (Google ドライブ、Dropbox、ルート エクスプローラー、およびソリッド エクスプローラー) のみが表示されます。2 つのエクスプローラーでは問題なく動作していますが、Google ドライブと Dropbox ではうまく動作していません (外部ストレージにアクセスできないためだと思います)。他の MIME タイプのような"*/*"ものも可能です。

public void openFolder(){
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()
         +  File.separator + "myFolder" + File.separator);
    intent.setDataAndType(uri, "text/csv");
    startActivity(Intent.createChooser(intent, "Open folder"));
}
于 2013-06-18T16:01:11.463 に答える
3
Intent chooser = new Intent(Intent.ACTION_GET_CONTENT);
Uri uri = Uri.parse(Environment.getDownloadCacheDirectory().getPath().toString());
chooser.addCategory(Intent.CATEGORY_OPENABLE);
chooser.setDataAndType(uri, "*/*");
// startActivity(chooser);
try {
startActivityForResult(chooser, SELECT_FILE);
}
catch (android.content.ActivityNotFoundException ex)
{
Toast.makeText(this, "Please install a File Manager.",
Toast.LENGTH_SHORT).show();
}

上記のコードでは、setDataAndType が "*/*" の場合、任意のファイルを選択するために組み込みのファイル ブラウザーが開かれ、"text/plain" を設定すると Dropbox が開かれます。Dropbox、Google ドライブをインストールしています。Dropbox をアンインストールすると、「*/*」のみが機能してファイル ブラウザが開きます。これは Android 4.4.2 です。getContentResolver().openInputStream(data.getData()) を使用して、Dropbox と Google Drive からコンテンツをダウンロードできます。

于 2015-12-11T08:24:24.197 に答える
-1
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("text/csv");

intent.addCategory(Intent.CATEGORY_OPENABLE);

try {
      startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), 0);

} catch (android.content.ActivityNotFoundException ex) {
  ex.printStackTrace();
}

次に、応答を追加するだけです

public void  onActivityResult(int requestCode, int resultCode, Intent data){

switch (requestCode) {
  case 0: {
     //what you want to do
    //file = new File(uri.getPath());
  }
}
}
于 2015-12-10T15:21:55.857 に答える
-2

あなたは近くにいるようです。

次のように URI を設定しようとします。

String folderPath = Environment.getExternalStorageDirectory()+"/pathTo/folder";

Intent intent = new Intent();  
intent.setAction(Intent.ACTION_GET_CONTENT);
Uri myUri = Uri.parse(folderPath);
intent.setDataAndType(myUri , "file/*");   
startActivity(intent);

しかし、それはあなたが試したものとそれほど違いはありません。何か変更があれば教えてください。

また、対象のフォルダーが存在することを確認し、結果のUriオブジェクトを見てからインテントに送信してください。これは期待どおりではない可能性があります。

于 2013-06-18T10:21:08.887 に答える
-3
File temp = File.createTempFile("preview", ".png" );
String fullfileName= temp.getAbsolutePath();
final String fileName = Uri.parse(fullfileName)
                    .getLastPathSegment();
final String filePath = fullfileName.
                     substring(0,fullfileName.lastIndexOf(File.separator));
Log.d("filePath", "filePath: " + filePath);

フルファイル名:

/mnt/sdcard/Download_Manager_Farsi/preview.png

ファイルパス:

/mnt/sdcard/Download_Manager_Farsi

于 2015-05-07T23:07:12.280 に答える