2012-02-17 5 views
1

私は、アプリのライフサイクルの特定の時点でいくつかのサウンドを再生するアプリを持っています。私はユーザーがこれらのサウンドをカスタマイズできるようにしたい(現在はres/rawディレクトリにあるmp3ファイルです)。私はRingtonePreferenceを見ていますが、表示された値に新しいサウンドを追加してアプリケーションで使用する方法が明確ではありません。誰かが私を正しい方向に向けることができれば、本当に感謝しています。アンドロイドは、アプリケーション内でカスタムサウンドエフェクトを選択する機能を追加しました

ありがとうございました!

EDIT

一つの方法は、メディアストアにファイルを追加するためのようです。以下に示すコードのようなもの。これはアンドロイドマニフェストファイルの中であなたが "android.permission.WRITE_SETTINGS"というアクセス許可を使用しなければならないので、今やちょっと残酷に見えます。理想的には、mp3リソースをメディアストアに書き込まずにオプションとして追加するだけです。

 ContentValues content = new ContentValues(); 
     InputStream raw = getResources() 
       .openRawResource(R.raw.file_name); 

     File f = new File("android.resource://" + getPackageName() + "/" 
       + R.raw.clock_ticking); 
     content.put(MediaStore.MediaColumns.DATA, f.getAbsolutePath()); 
     content.put(MediaStore.MediaColumns.TITLE, "TITLE"); 
     content.put(MediaStore.MediaColumns.SIZE, 215454); 
     content.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*"); 
     content.put(MediaStore.Audio.Media.ARTIST, "artist"); 
     content.put(MediaStore.Audio.Media.DURATION, 230); 
     content.put(MediaStore.Audio.Media.IS_RINGTONE, false); 
     content.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
     content.put(MediaStore.Audio.Media.IS_ALARM, false); 
     content.put(MediaStore.Audio.Media.IS_MUSIC, false); 

     Uri uri = MediaStore.Audio.Media.getContentUriForPath(f 
       .getAbsolutePath()); 
     Uri newUri = getContentResolver().insert(uri, content); 

EDIT 2: もう一つの方法は、使用リストの好みのようです。リストの設定は機能しますが、選択が変更されたときに手動で「再生」する必要があります。それがうまくいくかどうか私に見てみましょう、私は戻って報告するでしょう。

答えて

0

は私のために働いていた最善の解決策は次のとおりです。

使用ListPreferencesドロップダウンを作成します。最初に、res/valuesフォルダにsounds.xmlという文字列配列ファイルを作成します(次の2つのオプションがあるとします)。最初の配列はリストの設定で文字列として表示され、2番目の配列はそれにマップされた整数値です。次のように

<string-array name="preferenceName"> 
    <item>Sound 1</item> 
    <item>Sound 2</item> 
</string-array> 

<string-array name="preferenceValues"> 
    <item>0</item> 
    <item>1</item> 
</string-array> 

リストの嗜好自体はなります

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    > 

    <PreferenceCategory android:title="Sound" > 
     <ListPreference 
      android:entries="@array/preferenceName" 
      android:entryValues="@array/preferenceValues" 
      android:key="preferenceName" 
      /> 
    </PreferenceCategory> 

</PreferenceScreen> 

は今、私たちは音にユーザがオプションを選択するたびにプレーできるようにする必要があります。これは、OnPreferenceChangeListenerをリスト設定ウィジェットに追加することによって行われます。

private OnPreferenceChangeListener onPreferenceChangeListener = new OnPreferenceChangeListener() { 

     @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
      if "preferenceName".equals(preference 
        .getKey())) { 

       //play the sound mapped to this preference here using 
          // media player 
      } 
      return true; 
     } 



    }; 
0

ユーザーがファイルを選択してからMediaPlayerを使用して再生できるようにするために、ファイルエクスプローラを作成します(普通のJavaと同じFile classを使用します)。

編集:

あなたはそれが簡単に、SDカード内の指定したディレクトリにそれらを置くようにユーザーに依頼したい場合は、あなたが内のすべてのファイルを一覧表示するリストビューを使用することができ、yourapp/sounds言います何かを使用して、そのディレクトリ:

File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/yourapp/sounds"); 
File[] sounds = f.listFiles(); 
for (File sound : sounds) { 
    // Filter each one to see if it is a valid sound file 
    // and then add them to a ListView where the user can choose them 
} 
+0

ありがとうベーオウルフ(OnPreferenceChangeListenerについては、以下の擬似コードを参照) - 私はこれのために、ファイルエクスプローラを作成するよりもよりよい解決策があるかもしれないと思います。 – serverman

+0

私の編集を見てください.1つのディレクトリに制限するとはるかに簡単になりますし、何らかの許可は必要ありません。 'WRITE_SETTINGS'は多くの人に何が使われるのだろうかと思うでしょう:) –

+0

Thanx Beowulf。 WRITE_SETTINGSはここでは使用しないでください。私は、生のファイルから音のドロップダウンリストを作成する簡単な方法があるはずだと思います。それは理想的な解決策になります – serverman

関連する問題