2010-10-12 97 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); 

我的理解是,聲音將被保存並作爲鈴聲,通知聲音和報警器,標誌都設置爲「真」 。至少在模擬器上這可以工作,但在實際的設備上,聲音只出現在鈴聲列表中,我不知道爲什麼。

編輯:我試圖進一步調查:刪除與「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 2010-11-03 18:52:22

+0

經過測試和研究,我相信這實際上是要走的路,感謝您的確認。我想我會堅持使用我的解決方法,並詢問用戶保存文件的位置,而不是隻保存聲音兩次(如您所述)。即使這不是我的意圖,我想這是更好的可用性。 – Select0r 2010-11-03 20:51:24

-2

您必須查看Android 中的媒體播放器API(ieandroid.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

我*不*試圖播放聲音而我*不*錄製一個。還有*沒有* ClickListener參與。你甚至讀過這個問題嗎? – Select0r 2010-11-02 09:26:19

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 2010-11-03 09:10:49

+0

我試圖使用AudioColumns,但無法讓它在我的設備上保存鈴聲或通知聲音 - 所以MediaStore.Audio.Media似乎是要走的路。 – Select0r 2010-11-03 20:48:51