Android: сохранить звук в качестве мелодии звонка и уведомления - PullRequest
5 голосов
/ 12 октября 2010

Я сохраняю звук из своего приложения для использования в качестве мелодии звонка или звука уведомления. Вот часть моего кода, взята с этой страницы:

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» ничего не изменит (если только один флаг может быть использован одновременно), звук не отображается в списке с звучит уведомление.

Любая помощь приветствуется.

С уважением, Select0r

Ответы [ 3 ]

4 голосов
/ 28 октября 2010

Я поиграл с путем, чтобы решить эту проблему, и вот решение, которое я нашел до сих пор:

На эмуляторе путь не имеет значения, звук будет появляться в рингтоне, а такжесписок уведомлений.

На телефоне звук будет отображаться в списке мелодий звонка, если файл сохранен в /media/audio/ringtones ИЛИ /media/audio/, но НЕ как уведомление.Если я использую путь /media/audio/notifications, звук наконец появляется в списке уведомлений (!), Но НЕ в рингтонах.

Так что мне кажется, что мне нужно сохранить звук дважды чтобы попасть в оба списка?(Но почему сохранение его один раз срабатывает на эмуляторе?)

Если есть другой способ получения звуков в обоих списках (или даже в трех списках, есть и сигналы будильника, я просто не стал баловатьсяс их сохранением только один раз, пожалуйста, дайте мне знать.(Прямо сейчас мой обходной путь - это диалог, позволяющий пользователю выбрать, сохранять ли звук в качестве мелодии звонка или уведомления.)

1 голос
/ 03 ноября 2010

Поможет ли вам попытаться перейти с 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 сейчас используется.Я использую его в своем приложении, и, похоже, оно работает.

0 голосов
/ 02 ноября 2010

Вы должны заглянуть в API медиаплеера в Android i.e.android.media.MediaPlayer; 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(); 
                      } 
                 }); 
                } 
            }; 

Кроме того, вы пытались записать звук во время его воспроизведения? Попробуйте и посмотрите, работает ли он.

...