一、RingtonePreference 正常都是默认为静音的。要想设置为“默认铃声” ,xml中的defaultValue如下:
<RingtonePreference android:key="ring_choose_editor" android:title="@string/system_setup_notify_ring" android:defaultValue="content://settings/system/notification_sound"/>
二、如果想把默认铃声设置为自己的音乐,通过RingtonePreference偶没有找到解决方案(希望有解决方案的朋友能留言告知如何处理,多谢!),但可以通过RingtoneManager实现。
1、首先,将自己的声音文件保存到data/data/packagename/files下,如下:
public static final void saveDefaultRing(Context context) throws IOException { InputStream is = context.getAssets().open(PeConstants.DEFAULT_RING_NAME); FileOutputStream out = context.openFileOutput(PeConstants.DEFAULT_RING_NAME, Context.MODE_WORLD_READABLE); byte[] buf = new byte[1024]; int len; while ((len = is.read(buf)) > 0) { out.write(buf, 0, len); } is.close(); out.close(); }
2、读取声音文件的uri。
File f = context.getFileStreamPath(PeConstants.DEFAULT_RING_NAME); if (f.exists()) { uri = Uri.fromFile(f); }
3、展示声音提示框,设置默认铃声为自己的声音文件uri。
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);//声音类型 intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, onRestoreRingtone(RingtoneManager.TYPE_NOTIFICATION));//声音对话框出现时的选中的铃声 intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, Uri.parse(DEFAULT_RING_URI));//默认铃声的uri,既步骤2得到的uri startActivityForResult(intent, RINGTONE_PICKER);
4、onActivityResult方法中实现代码如下。
if (requestCode == RINGTONE_PICKER && resultCode == RESULT_OK) { // 得到我们选择的铃声并播放 Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); Ringtone myRingTone = RingtoneManager.getRingtone(mAppContext, uri); myRingTone.play(); Thread.sleep(3000); myRingTone.stop();}
三、铃声Uri对应表
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI---content://media/external/audio/media/ SD卡上面的
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI---content://media/internal/audio/media/ 手机
获取当前系统的不同类型的铃声uri:
RingtoneManager.getActualDefaultRingtoneUri(context,type)
type:
RingtoneManager.TYPE_NOTIFICATION(通知铃声),
RingtoneManager.TYPE_RINGTONE, RingtoneManager.TYPE_ALARM,RingtoneManager.TYPE_ALL,这四个类型,会得到带有具体id的uri,比如:
-----content://media/internal/audio/media/34
默认铃声:
Settings.System.DEFAULT_NOTIFICATION_URI----content://setting/system/notification_sound
Settings.System.DEFAULT_RINGTONE_URI------content://setting/system/ringtone
Settings.System.DEFAULT_ALARM_ALERT_URI-----content://setting/system/alarm_alert
静音 无
判断reminderRingtone铃声是具体是在sd,手机还是设置铃声。匹配在SD卡的话,进行处理。
UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sMatcher.addURI("media", "external/audio/media/#", 1);//#通配符,匹配数字
sMatcher.addURI("media", "internal/audio/media/#", 2);
sMatcher.addURI("settings", "system/*", 3);//notification_sound,*通配符,匹配文字
switch(sMatcher.match(Uri.parse(reminderRingtone)))
{
case 1:
boolean sdCardExist = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
if(!sdCardExist)
{
Editor editor = prefs.edit();
editor.putString(CalendarPreferenceActivity.KEY_ALERTS_RINGTONE, "content://settings/system/notification_sound");
editor.commit();
notification.sound = Settings.System.DEFAULT_NOTIFICATION_URI;
return;
}
break;
default:
break;
}
相关推荐
从给定的信息中,我们可以提炼出关于Android应用开发中偏好设置(Preference)的详细知识点,尤其是针对`RingtonePreference`的使用与理解。然而,由于标题、描述和标签中的重复字符串“RingtonePreference”并未...
在Android开发中,PreferenceActivity配合一系列的Preference子类,如CheckBoxPreference、EditTextPreference、ListPreference和RingtonePreference,可以轻松构建各种常见的设置选项。以下是对这些组件的详细介绍...
- **Preference分类**:Preference有多种类型,包括CheckBoxPreference(复选框)、EditTextPreference(文本编辑)、RingtonePreference(铃声选择)、SwitchPreference(开关按钮)等。每种类型对应不同的用户...
`android:key`同样用于标识,`android:title`是标题,`android:showDefault="true"`表示显示系统默认的铃声选项,`android:showSilent="true"`表示显示静音选项,`android:summary`则是提示用户选择铃声的说明。...
- `RingtonePreference`:用于设置铃声。 ### 实例分析:MusicPlayerSetting 以“我的位置”设置为例,其XML代码展示了如何使用`PreferenceCategory`和`CheckBoxPreference`构建具体的偏好设置界面。每个`...
- `android:defaultValue` 用于设置初始状态,这里“apply_wifi”默认为开启状态。 #### 六、触发事件 在PreferenceActivity中,当用户更改了设置后,通常需要刷新应用的状态或者更新UI。这可以通过监听Preference...
- RingtonePreference:用于选择系统铃声。 - SeekBarPreference:滑动条,用于设置数值。 3. **Preference的事件监听**: - 添加OnPreferenceChangeListener:监听Preference值的改变,可以在回调中执行相应的...
4. `RingtonePreference`:让用户从设备的铃声列表中选择一个铃声。 5. `Preference`:基础类型,通常用于创建自定义的偏好设置。 在实际应用中,可以根据需求组合使用这些Preference,构建出丰富的设置页面。同时...
- RingtonePreference:让用户选择系统铃声。 3. 在Activity中加载preference.xml文件,通常是在onCreate()方法中调用setContentView()的替代方法,即addPreferencesFromResource(R.xml.preference)。这将把XML中...
RingtonePreference 类专用于处理手机铃声。用户可以选择不同的铃声类型,例如 defaults、 silent、 vibrate 等。 8.3 首选项的组织 Android 的首选项可以使用两种方式来组织:一种是使用 PreferenceScreen 元素来...
源码中会有对应的类(如`RingtonePreference`)来处理这些设置,它们负责播放预览、存储用户选择的音频文件路径,并确保在系统中正确应用。 3. **电话场景模式**: 电话场景模式是Android系统中的一种功能,它允许...
`PreferenceManager`提供了获取默认首选项、设置默认首选项键值对等方法,而`SharedPreferences`则提供了读写首选项的方法。如果不使用PreferenceActivity,就需要手动处理数据的保存和读取。 在实际开发中,通过...
5. RingtonePreference:让用户选择手机中的铃声。 6. DialogPreference:作为基础类,用于创建自定义对话框式的Preference。 二、Preference的基本使用 1. 添加到XML布局:在res/xml目录下创建一个xml文件,例如...
5. RingtonePreference:专门为设置铃声而设计,让用户可以从设备的可用铃声中选择一个。 首选项的存储机制: 当用户在首选项界面中修改设置时,Android系统会自动将这些修改写入/data/data/[PACKAGE_NAME]/shared_...
Preference主要实现一些配置数据,一些我们上次...Preference组件有ListPreference,EditTextPreference,CheckBoxPreference和SwitchPreference,相对于View中的ListView,EditText,CheckBox,Switch和RingtonePreference .
9.1.4 RingtonePreference 9.2 组织首选项 9.3 以编程方式操作首选项 9.4 使用首选项保存状态 9.5 参考资料 9.6 小结 第10章 探索安全性和权限 10.1 理解Android安全性模型 10.1.1 安全性...
9.1.4 RingtonePreference 9.2 组织首选项 9.3 以编程方式操作首选项 9.4 使用首选项保存状态 9.5 参考资料 9.6 小结 第10章 探索安全性和权限 10.1 理解Android安全性模型 10.1.1 安全性...
在Android开发过程中,经常需要为应用提供一个用户可配置的界面,以便于用户能够调整各种设置。PreferenceActivity正是Android平台提供的一个非常实用的功能,它允许开发者轻松地创建配置界面,并且通过共享偏好...
此DEMO内含基本的android preference framework的简单介绍,包括CheckboxPreference, RingtonePreference, EditTextPreference以及ListPreference。主要探究了一下android 怎么通过使用preference从而达到对用户定制...
- **RingtonePreference**:用于选择铃声。 5. **监听偏好变更**: 若要在偏好值发生变化时执行某些操作,可以注册`OnSharedPreferenceChangeListener`: ```java preferences....