2011-10-06 87 views
19

我嘗試在這裏找到解決方案,但只有解決方案爲自己的/選定的文件,而不是代碼時,我打電話選擇器。我用下面的代碼,當用戶按下按鈕:如何使用RingtoneManager.ACTION_RINGTONE_PICKER設置鈴聲?

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:"); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION); 
ActivityCurrent.this.startActivityForResult(intent,999); 

這個節目的鈴聲選擇器,用戶可以選擇想要的鈴聲,但我錯過兩樣東西: - 它doesn't顯示當前的鈴聲,當它打開 - 它不點擊時保存鈴聲OK


我仍然無法找到方法如何打開RINGTONE_PICKER與已選定的當前鈴聲。任何想法?

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:"); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION); 
ActivityCurrent.this.startActivityForResult(intent,999); 

回答

20

您必須實施onActivityResult()以接收用戶選擇的結果,然後保存它。

if (resultCode == RESULT_OK) { 
    Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 
    if (uri != null) { 
    String ringTonePath = uri.toString(); 
} 

下面的例子:http://www.ceveni.com/2009/07/ringtone-picker-in-android-with-intent.html

編輯:更新

RingtoneManager.setActualDefaultRingtoneUri(
    myActivity, 
    RingtoneManager.TYPE_RINGTONE, 
    uri); 

則必須調用此:)

+0

謝謝,但這只是如何趕路。但我沒有看到: - 如何保存這些設置? - 如何在打開時顯示當前鈴聲? – Michalsx

+0

只是更新源,我以爲你已經知道了:) –

+0

親愛的Xjaphx:)非常感謝你,你救了我:)這段代碼正在按我的需要工作。 – Michalsx

12
Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtone); 
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, ringtone); 
startActivityForResult(intent , 1); 

「鈴聲」 是在我保存的URI在onActivityResult()挑選的語氣。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     switch (requestCode) { 
     case 1: 
      ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); 

      // Toast.makeText(getBaseContext(),RingtoneManager.URI_COLUMN_INDEX, 
      // Toast.LENGTH_SHORT).show(); 
      break; 

     default: 
      break; 
     } 
    } 
} 

希望它可以幫助你。如果是的話,擊中答案。

+0

它的工作原理!你節省了我的時間..謝謝 –

+0

謝謝你它的工作 但是,如果我們在RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI添加我們的原始文件uri,重新打開鈴聲後沒有選擇默認聲音的時間選擇選擇器 –

+0

能否請你告訴我 –

4

該代碼是完美的,適合我。但你忘了提及所需的權限..在這裏。試試這個code..hope它有助於

<uses-permission android:name="android.permission.WRITE_SETTINGS" ></uses-permission> 
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" ></uses-permission> 
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" ></uses-permission> 
+0

根植設備上,你只需要'android.permission.WRITE_SETTINGS'權限,不過不知道關於非root的設備, – ChuongPham

+0

哦,我不知道那個!! Thx的信息..我的根本是沒有根據的。所以我不得不讓所有這三個工作 –

4

該代碼將顯示哪些用戶在使用的鈴聲選擇器前面設置默認鈴聲。

在鈴聲意圖的按鈕中使用以下代碼。

public void pickRingtone(View view) { 
     // TODO Auto-generated method. stub 

     Intent intent = new.  Intent(RingtoneManager.ACTION_RINGTONE_PICKER); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, 
       RingtoneManager.TYPE_RINGTONE); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Ringtone"); 

    // for existing ringtone 
     Uri urie =  RingtoneManager.getActualDefaultRingtoneUri(
       getApplicationContext(), RingtoneManager.TYPE_RINGTONE); 
     intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, urie); 

    startActivityForResult(intent, 5); 
}