5

着信音または通知音として使用するために、アプリからサウンドを保存しています。このページから取得したコードの一部を次に示します。

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, soundName);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");
values.put(MediaStore.Audio.Media.ARTIST, "artist");
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true);
values.put(MediaStore.Audio.Media.IS_ALARM, true);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);

Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
this.getContentResolver().insert(uri, values);

私の理解では、フラグはすべて「true」に設定されているため、着信音、通知音、アラームだけでなく、サウンドも保存されます。少なくともエミュレーターではこれは機能しますが、実際のデバイスでは、サウンドは着信音リストにしか表示されず、その理由はわかりません。

編集:さらに調査を試みました:「IS_RINGTONE」の行を削除しても何も変わりません(一度に使用できるフラグが1つだけの場合)、音は通知とともにリストに表示されません-音がします。

どんな助けでも大歓迎です。

よろしく、 Select0r

4

3 に答える 3

4

これを解決するためのパスをいじってみましたが、これまでに思いついた解決策は次のとおりです。

エミュレーターではパスは関係ありません。サウンドは着信音と通知リストに表示されます。

電話では、ファイルが/media/audio/ringtonesORに保存されている場合、着信音リストにサウンドが表示されますが/media/audio/、通知としては表示されません。
パスを使用すると/media/audio/notifications、サウンドは最終的に通知リスト (!) に表​​示されますが、着信音には表示されなくなります。

サウンドを両方のリストに入れるには、サウンドを2 回保存する必要があるようです。(しかし、一度保存するとエミュレータで機能するのはなぜですか?)

一度保存するだけで両方のリスト (または 3 つのリスト、アラーム音もありますが、私はそれらをいじりませんでした) にサウンドを追加する別の方法がある場合は、お知らせください。(現在、私の回避策は、サウンドを着信音として保存するか通知として保存するかをユーザーが選択できるようにするダイアログです。)

于 2010-10-28T15:47:10.027 に答える
1

MediaStore.Audio.Media から AudioColumns に変更しようとすると役に立ちますか? このような:

values.put(AudioColumns.ARTIST, "artist");
values.put(AudioColumns.IS_RINGTONE, true);
values.put(AudioColumns.IS_NOTIFICATION, true);
values.put(AudioColumns.IS_ALARM, true);
values.put(AudioColumns.IS_MUSIC, false);

参照は、MediaStore.Audio.Media が非推奨であるとは言いませんが、AudioColumns が現在使用されていると思います。アプリで使用していますが、うまくいくようです。

于 2010-11-03T08:05:52.887 に答える
-2

Android ieandroid.media.MediaPlayer; のメディア プレーヤー API を調べる必要があります。android.media.MediaPlayer.OnCompletionListener . ここにあります: http: //developer.android.com/reference/android/media/package-summary ....そして、それがクリックリスナーの起動時にサウンドを再生する方法です:

     private OnClickListener btnDontBeStupidListener = new 
OnClickListener() 
            { 
                public void onClick(View v) 
                { 
                  //Toast.makeText(getBaseContext(), "Don't Be Stupid audio file 
is being played", Toast.LENGTH_SHORT).show(); 
                  final MediaPlayer mp = MediaPlayer.create(iMEvil.this, 
R.raw.stupid); 
                  //mp.start(); 
                  try { 
                          mp.start(); 
                          //mp.release(); 
                  }catch(NullPointerException e){ 
                        Log.v("MP error", e.toString()); 
                  } 
                  mp.setOnCompletionListener(new OnCompletionListener(){ 
                      // @Override 
                      public void onCompletion(MediaPlayer arg0) { 
                         mp.release(); 
                      } 
                 }); 
                } 
            }; 

また、再生中の音を録音してみましたか?試してみて、それが機能するかどうかを確認してください。

于 2010-11-02T05:57:55.193 に答える