最近研究源码程序,改了改手机短信铃声的源码,最近总结了下铃声的代码,写个activity继承PreferenceActivity有:手机短信铃声,手机铃声,闹钟铃声,还有sdcard中的铃声,通过选择相应的铃声,然后读取到xml文件里面,通过读取preference.xml文件,intent传个参数进去intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, phoneUri);打开对话框的时候就默认选中上次被选中的音乐。程序流程:在onCreate()方法中加入addPreferencesFromResource(R.xml.preferences);加载xml文件。@Override重写onPreferenceTreeClick()方法,处理点击事件,在打开对话框铃声的时候,先读取xml文件,判断是否有值,如果有值,就传值intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, phoneUri);然后进行选择铃声。通过onActivityResult()接受传递过来的uri,系统默认的铃声是通过data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);方法来获取uri的,而sdcard中的铃声通过Uri pickedUri = data.getData();来获得选中的uri的,再然后通过editor.commit(); 来提交接受过来的uri和音乐的名字整个流程大概就是这样。想要代码的请留言留下邮箱!
大明原创,转载请标明出处:http://blog.csdn.net/wdaming1986/article/details/6919653
下面请看截图:
第一次打开程序的界面: 点击“选择短信铃声”后的界面:
选择铃声的dialog后的界面: 点击“选择手机铃声”后的界面:
点击“选择手机铃声”后的界面: 点击“选择闹钟铃声”后的dialog界面:
点击“选择sdcard中的铃声”后的界面: 点击“选择曲目”后弹出sdcard的界面:
下面代码附上:
在SoundSettingActivity这个工程下面:
一、在com.cn.android.daming包的SoundSettingMainActivity.java类中的代码:
- <span style="font-size:16px;color:#000000;">package com.cn.android.daming;
-
- import android.content.Intent;
- import android.content.SharedPreferences;
- import android.media.Ringtone;
- import android.media.RingtoneManager;
- import android.net.Uri;
- import android.os.Bundle;
- import android.preference.Preference;
- import android.preference.PreferenceActivity;
- import android.preference.PreferenceManager;
- import android.preference.PreferenceScreen;
-
- public class SoundSettingMainActivity extends PreferenceActivity {
-
- private static final int SMS_RINGTONE_PICKED = 1;
- private static final int PHONE_RINGTONE_PICKED = 2;
- private static final int ALARM_RINGTONE_PICKED = 3;
- private static final int SDCARD_RINGTONE_PICKED = 4;
-
- public static final String NOTIFICATION_RINGTONE = "pref_notification_ringtone";
- public static final String NOTIFICATION_RINGTONE_TITLE_NAME = "pref_notification_ringtone_name";
- public static final String PHONE_RINGTONE = "pref_phone_ringtone";
- public static final String PHONE_RINGTONE_TITLE_NAME = "pref_phone_ringtone_title_name";
- public static final String ALARM_RINGTONE = "pref_alarm_ringtone";
- public static final String ALARM_RINGTONE_TITLE_NAME = "pref_alarm_ringtone_title_name";
- public static final String SDCARD_RINGTONE = "pref_sdcard_ringtone";
- public static final String SDCARD_RINGTONE_TITLE_NAME = "pref_sdcard_ringtone_title_name";
-
- private String notificationStr;
- private String phoneStr;
- private String alarmStr;
- private String sdcardStr;
-
- private Preference mMmsSoundsPref;
- private Preference mPhoneSoundsPref;
- private Preference mAlarmSoundsPref;
- private Preference mSdcardSoundsPref;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.preferences);
- setMessagePreferences();
- setDefaultPreferences();
- }
-
- private void setMessagePreferences() {
- mMmsSoundsPref = findPreference("pref_sms_ringtone");
- mPhoneSoundsPref = findPreference("pref_phone_ringtone");
- mAlarmSoundsPref = findPreference("pref_alarm_ringtone");
- mSdcardSoundsPref = findPreference("pref_sdcard_ringtone");
- }
-
- private void setDefaultPreferences(){
- SharedPreferences innersharedPreferences = PreferenceManager.getDefaultSharedPreferences(SoundSettingMainActivity.this);
- String notificationRingtoneTitleName = innersharedPreferences.getString(NOTIFICATION_RINGTONE_TITLE_NAME, null);
- if(notificationRingtoneTitleName!=null){
- mMmsSoundsPref.setSummary(notificationRingtoneTitleName);
- }else{
- mMmsSoundsPref.setSummary(getString(R.string.pref_summary_notification_ringtone));
- }
-
- String phoneRingtoneTitleName = innersharedPreferences.getString(PHONE_RINGTONE_TITLE_NAME, null);
- if(phoneRingtoneTitleName!=null){
- mPhoneSoundsPref.setSummary(phoneRingtoneTitleName);
- }else{
- mPhoneSoundsPref.setSummary(getString(R.string.pref_summary_phone_ringtone));
- }
-
- String alarmRingtoneTitleName = innersharedPreferences.getString(ALARM_RINGTONE_TITLE_NAME, null);
- if(alarmRingtoneTitleName!=null){
- mAlarmSoundsPref.setSummary(alarmRingtoneTitleName);
- }else{
- mAlarmSoundsPref.setSummary(getString(R.string.pref_summary_alarm_ringtone));
- }
-
- String sdcardRingtoneTitleName = innersharedPreferences.getString(SDCARD_RINGTONE_TITLE_NAME, null);
- if(sdcardRingtoneTitleName!=null){
- mSdcardSoundsPref.setSummary(sdcardRingtoneTitleName);
- }else{
- mSdcardSoundsPref.setSummary(getString(R.string.pref_summary_sdcard_ringtone));
- }
- }
-
- @Override
- public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
- Preference preference) {
- if (preference == mMmsSoundsPref){
- doPickSmsRingtone();
- }
- else if(preference == mPhoneSoundsPref){
- doPickPhoneRingtone();
- }
- else if(preference == mAlarmSoundsPref){
- doPickAlarmRingtone();
- }
- else if(preference == mSdcardSoundsPref){
- doPickSdcardRingtone();
- }
- return super.onPreferenceTreeClick(preferenceScreen, preference);
- }
-
- private void doPickSmsRingtone(){
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- notificationStr = sharedPreferences.getString(NOTIFICATION_RINGTONE, null);
-
- Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
-
- Uri notificationUri;
- if (notificationStr != null) {
- notificationUri = Uri.parse(notificationStr);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, notificationUri);
- } else {
-
- notificationUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, notificationUri);
- }
-
-
- startActivityForResult(intent, SMS_RINGTONE_PICKED);
- }
-
- private void doPickPhoneRingtone(){
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- phoneStr = sharedPreferences.getString(PHONE_RINGTONE, null);
-
- Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE));
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
-
- Uri phoneUri;
- if (phoneStr != null) {
- phoneUri = Uri.parse(phoneStr);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, phoneUri);
- } else {
-
- phoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, phoneUri);
- }
-
- startActivityForResult(intent, PHONE_RINGTONE_PICKED);
- }
-
- private void doPickAlarmRingtone(){
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- alarmStr = sharedPreferences.getString(ALARM_RINGTONE, null);
-
- Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM));
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
-
- Uri alarmUri;
- if (alarmStr != null) {
- alarmUri = Uri.parse(alarmStr);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, alarmUri);
- } else {
-
- alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
-
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, alarmUri);
- }
-
- startActivityForResult(intent, ALARM_RINGTONE_PICKED);
- }
-
- private void doPickSdcardRingtone(){
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- sdcardStr = sharedPreferences.getString(SDCARD_RINGTONE, null);
-
- Uri sdcardUri = null;
- if (sdcardStr != null) {
- sdcardUri = Uri.parse(sdcardStr);
- }
-
- Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT);
- innerIntent.setType("audio/*");
-
-
-
-
-
- innerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, sdcardUri);
- Intent wrapperIntent = Intent.createChooser(innerIntent, null);
- startActivityForResult(wrapperIntent, SDCARD_RINGTONE_PICKED);
- }
-
- @Override
- protected void onResume() {
- setDefaultPreferences();
- super.onResume();
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- SharedPreferences.Editor editor = sharedPreferences.edit();
- if (resultCode != RESULT_OK) {
- return;
- }
-
- switch (requestCode) {
- case SMS_RINGTONE_PICKED:{
- Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
- if(null == pickedUri){
- editor.putString(NOTIFICATION_RINGTONE_TITLE_NAME, getString(R.string.select_ringtone_slient));
- editor.putString(NOTIFICATION_RINGTONE, null);
- editor.commit();
- }else{
- Ringtone ringtone = RingtoneManager.getRingtone(SoundSettingMainActivity.this, pickedUri);
- String strRingtone = ringtone.getTitle(SoundSettingMainActivity.this);
- editor.putString(NOTIFICATION_RINGTONE_TITLE_NAME, strRingtone);
- editor.putString(NOTIFICATION_RINGTONE, pickedUri.toString());
- editor.commit();
- }
- break;
- }
- case PHONE_RINGTONE_PICKED:{
- Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
- if(null == pickedUri){
- editor.putString(PHONE_RINGTONE_TITLE_NAME, getString(R.string.select_ringtone_slient));
- editor.putString(PHONE_RINGTONE, null);
- editor.commit();
- }else{
- phoneStr = pickedUri.toString();
- Ringtone ringtone = RingtoneManager.getRingtone(SoundSettingMainActivity.this, pickedUri);
- String strRingtone = ringtone.getTitle(SoundSettingMainActivity.this);
- editor.putString(PHONE_RINGTONE_TITLE_NAME, strRingtone);
- editor.putString(PHONE_RINGTONE, pickedUri.toString());
- editor.commit();
- }
- break;
- }
- case ALARM_RINGTONE_PICKED:{
- Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
- if(null == pickedUri){
- editor.putString(ALARM_RINGTONE_TITLE_NAME, getString(R.string.select_ringtone_slient));
- editor.putString(ALARM_RINGTONE, null);
- editor.commit();
- }else{
- Ringtone ringtone = RingtoneManager.getRingtone(SoundSettingMainActivity.this, pickedUri);
- String strRingtone = ringtone.getTitle(SoundSettingMainActivity.this);
- editor.putString(ALARM_RINGTONE_TITLE_NAME, strRingtone);
- editor.putString(ALARM_RINGTONE, pickedUri.toString());
- editor.commit();
- }
- break;
- }
- case SDCARD_RINGTONE_PICKED:{
- Uri pickedUri = data.getData();
- if(null != pickedUri){
- notificationStr = pickedUri.toString();
- Ringtone ringtone = RingtoneManager.getRingtone(SoundSettingMainActivity.this, pickedUri);
- String strRingtone = ringtone.getTitle(SoundSettingMainActivity.this);
- editor.putString(SDCARD_RINGTONE_TITLE_NAME, strRingtone);
- editor.putString(SDCARD_RINGTONE, pickedUri.toString());
- editor.commit();
- }
- break;
- }
- default:break;
- }
- }
- }</span>
<span style="font-size:16px;color:#000000;">package com.cn.android.daming; import android.content.Intent; import android.content.SharedPreferences; import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; public class SoundSettingMainActivity extends PreferenceActivity { private static final int SMS_RINGTONE_PICKED = 1; private static final int PHONE_RINGTONE_PICKED = 2; private static final int ALARM_RINGTONE_PICKED = 3; private static final int SDCARD_RINGTONE_PICKED = 4; public static final String NOTIFICATION_RINGTONE = "pref_notification_ringtone"; public static final String NOTIFICATION_RINGTONE_TITLE_NAME = "pref_notification_ringtone_name"; public static final String PHONE_RINGTONE = "pref_phone_ringtone"; public static final String PHONE_RINGTONE_TITLE_NAME = "pref_phone_ringtone_title_name"; public static final String ALARM_RINGTONE = "pref_alarm_ringtone"; public static final String ALARM_RINGTONE_TITLE_NAME = "pref_alarm_ringtone_title_name"; public static final String SDCARD_RINGTONE = "pref_sdcard_ringtone"; public static final String SDCARD_RINGTONE_TITLE_NAME = "pref_sdcard_ringtone_title_name"; private String notificationStr; private String phoneStr; private String alarmStr; private String sdcardStr; private Preference mMmsSoundsPref; private Preference mPhoneSoundsPref; private Preference mAlarmSoundsPref; private Preference mSdcardSoundsPref; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); setMessagePreferences(); setDefaultPreferences(); } private void setMessagePreferences() { mMmsSoundsPref = findPreference("pref_sms_ringtone"); mPhoneSoundsPref = findPreference("pref_phone_ringtone"); mAlarmSoundsPref = findPreference("pref_alarm_ringtone"); mSdcardSoundsPref = findPreference("pref_sdcard_ringtone"); } private void setDefaultPreferences(){ SharedPreferences innersharedPreferences = PreferenceManager.getDefaultSharedPreferences(SoundSettingMainActivity.this); String notificationRingtoneTitleName = innersharedPreferences.getString(NOTIFICATION_RINGTONE_TITLE_NAME, null); if(notificationRingtoneTitleName!=null){ mMmsSoundsPref.setSummary(notificationRingtoneTitleName); }else{ mMmsSoundsPref.setSummary(getString(R.string.pref_summary_notification_ringtone)); } String phoneRingtoneTitleName = innersharedPreferences.getString(PHONE_RINGTONE_TITLE_NAME, null); if(phoneRingtoneTitleName!=null){ mPhoneSoundsPref.setSummary(phoneRingtoneTitleName); }else{ mPhoneSoundsPref.setSummary(getString(R.string.pref_summary_phone_ringtone)); } String alarmRingtoneTitleName = innersharedPreferences.getString(ALARM_RINGTONE_TITLE_NAME, null); if(alarmRingtoneTitleName!=null){ mAlarmSoundsPref.setSummary(alarmRingtoneTitleName); }else{ mAlarmSoundsPref.setSummary(getString(R.string.pref_summary_alarm_ringtone)); } String sdcardRingtoneTitleName = innersharedPreferences.getString(SDCARD_RINGTONE_TITLE_NAME, null); if(sdcardRingtoneTitleName!=null){ mSdcardSoundsPref.setSummary(sdcardRingtoneTitleName); }else{ mSdcardSoundsPref.setSummary(getString(R.string.pref_summary_sdcard_ringtone)); } } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if (preference == mMmsSoundsPref){ doPickSmsRingtone(); } else if(preference == mPhoneSoundsPref){ doPickPhoneRingtone(); } else if(preference == mAlarmSoundsPref){ doPickAlarmRingtone(); } else if(preference == mSdcardSoundsPref){ doPickSdcardRingtone(); } return super.onPreferenceTreeClick(preferenceScreen, preference); } private void doPickSmsRingtone(){ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); notificationStr = sharedPreferences.getString(NOTIFICATION_RINGTONE, null); Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); // Allow user to pick 'Default' intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); // Show only ringtones intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION); //set the default Notification value intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); // Don't show 'Silent' intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true); Uri notificationUri; if (notificationStr != null) { notificationUri = Uri.parse(notificationStr); // Put checkmark next to the current ringtone for this contact intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, notificationUri); } else { // Otherwise pick default ringtone Uri so that something is selected. notificationUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); // Put checkmark next to the current ringtone for this contact intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, notificationUri); } // Launch! startActivityForResult(intent, SMS_RINGTONE_PICKED); } private void doPickPhoneRingtone(){ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); phoneStr = sharedPreferences.getString(PHONE_RINGTONE, null); Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); // Allow user to pick 'Default' intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); // Show only ringtones intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE); //set the default Notification value intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)); // Don't show 'Silent' intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true); Uri phoneUri; if (phoneStr != null) { phoneUri = Uri.parse(phoneStr); // Put checkmark next to the current ringtone for this contact intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, phoneUri); } else { // Otherwise pick default ringtone Uri so that something is selected. phoneUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); // Put checkmark next to the current ringtone for this contact intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, phoneUri); } startActivityForResult(intent, PHONE_RINGTONE_PICKED); } private void doPickAlarmRingtone(){ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); alarmStr = sharedPreferences.getString(ALARM_RINGTONE, null); Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); // Allow user to pick 'Default' intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true); // Show only ringtones intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM); //set the default Notification value intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)); // Don't show 'Silent' intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true); Uri alarmUri; if (alarmStr != null) { alarmUri = Uri.parse(alarmStr); // Put checkmark next to the current ringtone for this contact intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, alarmUri); } else { // Otherwise pick default ringtone Uri so that something is selected. alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); // Put checkmark next to the current ringtone for this contact intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, alarmUri); } startActivityForResult(intent, ALARM_RINGTONE_PICKED); } private void doPickSdcardRingtone(){ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); sdcardStr = sharedPreferences.getString(SDCARD_RINGTONE, null); Uri sdcardUri = null; if (sdcardStr != null) { sdcardUri = Uri.parse(sdcardStr); } Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); innerIntent.setType("audio/*"); //you could lookup the framework the type of audio,if you don`t want use the Recorder use the note code // innerIntent.setType("audio/aac"); // innerIntent.setType("audio/mp3"); // innerIntent.setType("audio/midi"); // Put checkmark next to the current ringtone for this contact innerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, sdcardUri); Intent wrapperIntent = Intent.createChooser(innerIntent, null); startActivityForResult(wrapperIntent, SDCARD_RINGTONE_PICKED); } @Override protected void onResume() { setDefaultPreferences(); super.onResume(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = sharedPreferences.edit(); if (resultCode != RESULT_OK) { return; } switch (requestCode) { case SMS_RINGTONE_PICKED:{ Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); if(null == pickedUri){ editor.putString(NOTIFICATION_RINGTONE_TITLE_NAME, getString(R.string.select_ringtone_slient)); editor.putString(NOTIFICATION_RINGTONE, null); editor.commit(); }else{ Ringtone ringtone = RingtoneManager.getRingtone(SoundSettingMainActivity.this, pickedUri); String strRingtone = ringtone.getTitle(SoundSettingMainActivity.this); editor.putString(NOTIFICATION_RINGTONE_TITLE_NAME, strRingtone); editor.putString(NOTIFICATION_RINGTONE, pickedUri.toString()); editor.commit(); } break; } case PHONE_RINGTONE_PICKED:{ Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); if(null == pickedUri){ editor.putString(PHONE_RINGTONE_TITLE_NAME, getString(R.string.select_ringtone_slient)); editor.putString(PHONE_RINGTONE, null); editor.commit(); }else{ phoneStr = pickedUri.toString(); Ringtone ringtone = RingtoneManager.getRingtone(SoundSettingMainActivity.this, pickedUri); String strRingtone = ringtone.getTitle(SoundSettingMainActivity.this); editor.putString(PHONE_RINGTONE_TITLE_NAME, strRingtone); editor.putString(PHONE_RINGTONE, pickedUri.toString()); editor.commit(); } break; } case ALARM_RINGTONE_PICKED:{ Uri pickedUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); if(null == pickedUri){ editor.putString(ALARM_RINGTONE_TITLE_NAME, getString(R.string.select_ringtone_slient)); editor.putString(ALARM_RINGTONE, null); editor.commit(); }else{ Ringtone ringtone = RingtoneManager.getRingtone(SoundSettingMainActivity.this, pickedUri); String strRingtone = ringtone.getTitle(SoundSettingMainActivity.this); editor.putString(ALARM_RINGTONE_TITLE_NAME, strRingtone); editor.putString(ALARM_RINGTONE, pickedUri.toString()); editor.commit(); } break; } case SDCARD_RINGTONE_PICKED:{ Uri pickedUri = data.getData(); if(null != pickedUri){ notificationStr = pickedUri.toString(); Ringtone ringtone = RingtoneManager.getRingtone(SoundSettingMainActivity.this, pickedUri); String strRingtone = ringtone.getTitle(SoundSettingMainActivity.this); editor.putString(SDCARD_RINGTONE_TITLE_NAME, strRingtone); editor.putString(SDCARD_RINGTONE, pickedUri.toString()); editor.commit(); } break; } default:break; } } }</span>
二、在res目录下加入xml文件,加入preferences.xml中的代码:
- <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>
- <PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android">
- <PreferenceCategory android:title="@string/pref_sounds_storage_title"
- android:key="pref_key_storage_settings">
- <Preference
- android:layout="?android:attr/preferenceLayoutChild"
- android:key="pref_sms_ringtone"
- android:ringtoneType="notification"
- android:title="@string/pref_title_notification_ringtone"
- android:summary="@string/pref_summary_notification_ringtone"
- />
- <Preference
- android:layout="?android:attr/preferenceLayoutChild"
- android:key="pref_phone_ringtone"
- android:ringtoneType="notification"
- android:title="@string/pref_title_phone_ringtone"
- android:summary="@string/pref_summary_phone_ringtone"
- />
- <Preference
- android:layout="?android:attr/preferenceLayoutChild"
- android:key="pref_alarm_ringtone"
- android:ringtoneType="notification"
- android:title="@string/pref_title_alarm_ringtone"
- android:summary="@string/pref_summary_alarm_ringtone"
- />
- <Preference
- android:layout="?android:attr/preferenceLayoutChild"
- android:key="pref_sdcard_ringtone"
- android:ringtoneType="notification"
- android:title="@string/pref_title_sdcard_ringtone"
- android:summary="@string/pref_summary_sdcard_ringtone"
- />
- </PreferenceCategory>
- </PreferenceScreen>
- </span>
<span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="@string/pref_sounds_storage_title" android:key="pref_key_storage_settings"> <Preference android:layout="?android:attr/preferenceLayoutChild" android:key="pref_sms_ringtone" android:ringtoneType="notification" android:title="@string/pref_title_notification_ringtone" android:summary="@string/pref_summary_notification_ringtone" /> <Preference android:layout="?android:attr/preferenceLayoutChild" android:key="pref_phone_ringtone" android:ringtoneType="notification" android:title="@string/pref_title_phone_ringtone" android:summary="@string/pref_summary_phone_ringtone" /> <Preference android:layout="?android:attr/preferenceLayoutChild" android:key="pref_alarm_ringtone" android:ringtoneType="notification" android:title="@string/pref_title_alarm_ringtone" android:summary="@string/pref_summary_alarm_ringtone" /> <Preference android:layout="?android:attr/preferenceLayoutChild" android:key="pref_sdcard_ringtone" android:ringtoneType="notification" android:title="@string/pref_title_sdcard_ringtone" android:summary="@string/pref_summary_sdcard_ringtone" /> </PreferenceCategory> </PreferenceScreen> </span>
三、在values目录下的string中的代码:
- <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>
- <resources>
- <string name="hello">Hello World, SoundSettingMainActivity!</string>
- <string name="app_name">SoundSettingApp</string>
- <string name="pref_sounds_storage_title">大明原创SoundSetting</string>
- <string name="pref_title_notification_ringtone">选择短信铃声</string>
- <string name="pref_summary_notification_ringtone">默认短信铃声</string>
- <string name="pref_title_phone_ringtone">选择手机铃声</string>
- <string name="pref_summary_phone_ringtone">默认手机铃声</string>
- <string name="pref_title_alarm_ringtone">选择闹钟铃声</string>
- <string name="pref_summary_alarm_ringtone">默认闹钟铃声</string>
- <string name="pref_title_sdcard_ringtone">选择Sdcard中的铃声</string>
- <string name="pref_summary_sdcard_ringtone">默认Sdcard铃声</string>
- <string name="select_ringtone_slient">静音</string>
- </resources>
- </span>
<span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, SoundSettingMainActivity!</string> <string name="app_name">SoundSettingApp</string> <string name="pref_sounds_storage_title">大明原创SoundSetting</string> <string name="pref_title_notification_ringtone">选择短信铃声</string> <string name="pref_summary_notification_ringtone">默认短信铃声</string> <string name="pref_title_phone_ringtone">选择手机铃声</string> <string name="pref_summary_phone_ringtone">默认手机铃声</string> <string name="pref_title_alarm_ringtone">选择闹钟铃声</string> <string name="pref_summary_alarm_ringtone">默认闹钟铃声</string> <string name="pref_title_sdcard_ringtone">选择Sdcard中的铃声</string> <string name="pref_summary_sdcard_ringtone">默认Sdcard铃声</string> <string name="select_ringtone_slient">静音</string> </resources> </span>
四、在AndroidManifest.xml中的代码:
- <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.cn.android.daming"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="8" />
-
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".SoundSettingMainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application> 完整代码下载地址:http://download.csdn.net/detail/wdaming1986/3736718
<span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cn.android.daming" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".SoundSettingMainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest></span>