2010-10-12 3 views
4

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

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); 

Я понимаю, что звук будет сохранен, а в качестве мелодии звонка, звук уведомления и сигнал тревоги, так как флаги все готово к «истинным» , По крайней мере, на эмуляторе это работает, но на самом устройстве, звук появляется только в списке мелодий звонка, и я понятия не имею, почему.

EDIT: Я попытался подробнее исследовать: удаление линии с помощью «IS_RINGTONE» ничего не изменит (в случае, если одновременно используется только один флаг), звук не отображается в списке с уведомлением-звуками.

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

С наилучшими пожеланиями, Select0r

+0

Кто-нибудь знает, возможно ли это на FLASH CS5.5 ???? Я разработал звуковую дорожку там, где мне действительно нужно получить мелодии, добавленные в срочном порядке. – 2011-10-17 20:04:34

ответ

4

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

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

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

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

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

+0

Я столкнулся с этой проблемой и с моей декой. Насколько я могу судить, вам нужно сохранять его несколько раз. Я просто использовал AlertDialog, который дал возможность сохранить его, который изменил путь.Но поскольку вы хотите сохранить его в обоих списках, я думаю, вам нужно сохранить его дважды. – Snailer

+0

После испытаний и исследований я считаю, что это на самом деле путь, спасибо за подтверждение. Думаю, я буду придерживаться своего обходного пути и попрошу пользователя сохранить файл вместо того, чтобы просто сохранить звук дважды (как вы уже упоминали). Несмотря на то, что это было не мое намерение, я думаю, это лучшее удобство использования. – Select0r

-2

Вам необходимо изучить 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(); 
         } 
       }); 
       } 
      }; 

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

+0

I * не * пытаясь воспроизвести звук и я * не * запись один. Также есть * no * ClickListener. Вы даже прочитали вопрос? – Select0r

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

+0

Хорошая точка, спасибо. Я попробую и вернусь к вам, если это сработает. – Select0r

+0

Я попытался использовать AudioColumns, но не смог заставить его работать, чтобы сохранить мелодию звонка или звук уведомления на моем устройстве вообще, поэтому MediaStore.Audio.Media кажется, путь. – Select0r

Смежные вопросы