2011-10-06 146 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); 
}