2013-01-03 10 views
8

私のアンドロイドアプリケーションでは、以下のコードを使用して、選択してアップロードするmp3ファイルをリストしています。
私は知っておきたいのは、ファイルの種類とその期間をフィルタリングすることです。Intent.createchooserを使用している間に.mp3ファイルの期間でフィルタリングすることは可能ですか?

Intent intent = new Intent(); 
intent.setType("audio/*");    
intent.setAction(Intent.ACTION_GET_CONTENT); 
try { 
    startActivityForResult(Intent.createChooser(intent, "Select your Audio"), Global.FILE_FROM_SD); 
} 
catch (android.content.ActivityNotFoundException ex) { 
    // Potentially direct the user to the Market with a Dialog 
    Toast.makeText(WizardStep1.this, 
      "Please install a File Manager.", 
      Toast.LENGTH_SHORT).show(); 
} 

答えて

2

私はそうは思わない、または少なくともあなたがどのように開始した方法ではありません。

インテントチューザを作成して別のファイルマネージャを開くと、特定の条件でフィルタリングされたような、特定のファイルマネージャを表示するデータを制御することはできません。

解決方法ここでは、配列にreturns all audio files from sdcardというメソッドを作成し、フィルタを使用して、ファイルの拡張子(.mp3)を、gets the duration of a fileのメソッドと組み合わせて決定します。
フィルタリングされたコンテンツを新しい配列に追加してから、フィルタリングされたファイルを使用してください。たとえば、ListViewと表示し、アップロードするものを選択させます。

擬似コードは次のようになります。

ArrayList<String> filteredFiles = new ArrayList<String>(); 

String[] audioFiles = getAllAudioFiles(); 
for (String file : audioFiles) { 
    if (file.endsWith(".mp3") && getDuration(file) >= DURATION_CONSTANT) { 
     filteredFiles.add(file); 
    } 
} 

次にListViewfilteredFilesの内容を表示し、ファイルをアップロード/選択するための適切なロジックを提供します。

+0

ありがとうございますAndy Res –

2

AFAIKこれはできません。インテントレシーバーは、次のようなMIMEタイプを扱うことができますaudio/*

MIMEタイプの目的は、期待する/希望する/受け入れるメディアのタイプを表現することです。どのような属性(AFAIK)もサポートしていません。

もしそうだったとしても、あなたのシナリオを満たすためには、ほんの一握りのAndroidアプリケーションがそれをサポートするとは思いません。

このような余分なデータを受け入れることをサポートするアプリが見つかる場合は、Intent.putExtra (String name, Bundle value)を使用して、アプリケーション固有の「余分な」データを渡すことをお勧めします。普及しているES File Explorerアプリはそれをサポートしていないようですので、大部分のユーザーにとってこれはうまくいかないと思います。

+0

Madushanありがとう、私はまた、この方法で確認する必要があると考えています。再びあなたの貴重な答えに感謝します。 –

関連する問題