`
gjhappyyy
  • 浏览: 259610 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

RingtonePreference 设置为默认铃声

 
阅读更多

一、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;
}

 

分享到:
评论

相关推荐

    RingtonePreferenceRingtonePreferenceRingtonePreferenceRingtonePreference

    从给定的信息中,我们可以提炼出关于Android应用开发中偏好设置(Preference)的详细知识点,尤其是针对`RingtonePreference`的使用与理解。然而,由于标题、描述和标签中的重复字符串“RingtonePreference”并未...

    Android软件开发11-12[整理].pdf

    在Android开发中,PreferenceActivity配合一系列的Preference子类,如CheckBoxPreference、EditTextPreference、ListPreference和RingtonePreference,可以轻松构建各种常见的设置选项。以下是对这些组件的详细介绍...

    安卓Android源码——Preference_Demo.rar

    - **Preference分类**:Preference有多种类型,包括CheckBoxPreference(复选框)、EditTextPreference(文本编辑)、RingtonePreference(铃声选择)、SwitchPreference(开关按钮)等。每种类型对应不同的用户...

    Android学习笔记(四十):Preference的使用.doc

    `android:key`同样用于标识,`android:title`是标题,`android:showDefault="true"`表示显示系统默认的铃声选项,`android:showSilent="true"`表示显示静音选项,`android:summary`则是提示用户选择铃声的说明。...

    android中PreferenceActivity详解

    - `RingtonePreference`:用于设置铃声。 ### 实例分析:MusicPlayerSetting 以“我的位置”设置为例,其XML代码展示了如何使用`PreferenceCategory`和`CheckBoxPreference`构建具体的偏好设置界面。每个`...

    Android之PreferenceActivity简介

    - `android:defaultValue` 用于设置初始状态,这里“apply_wifi”默认为开启状态。 #### 六、触发事件 在PreferenceActivity中,当用户更改了设置后,通常需要刷新应用的状态或者更新UI。这可以通过监听Preference...

    Preference demo

    - RingtonePreference:用于选择系统铃声。 - SeekBarPreference:滑动条,用于设置数值。 3. **Preference的事件监听**: - 添加OnPreferenceChangeListener:监听Preference值的改变,可以在回调中执行相应的...

    android各种Preference的使用

    4. `RingtonePreference`:让用户从设备的铃声列表中选择一个铃声。 5. `Preference`:基础类型,通常用于创建自定义的偏好设置。 在实际应用中,可以根据需求组合使用这些Preference,构建出丰富的设置页面。同时...

    Android之PreferenceActivity.doc

    - RingtonePreference:让用户选择系统铃声。 3. 在Activity中加载preference.xml文件,通常是在onCreate()方法中调用setContentView()的替代方法,即addPreferencesFromResource(R.xml.preference)。这将把XML中...

    第8章--Android的安全性和首选项.pptx

    RingtonePreference 类专用于处理手机铃声。用户可以选择不同的铃声类型,例如 defaults、 silent、 vibrate 等。 8.3 首选项的组织 Android 的首选项可以使用两种方式来组织:一种是使用 PreferenceScreen 元素来...

    RingProfile_android源码_

    源码中会有对应的类(如`RingtonePreference`)来处理这些设置,它们负责播放预览、存储用户选择的音频文件路径,并确保在系统中正确应用。 3. **电话场景模式**: 电话场景模式是Android系统中的一种功能,它允许...

    详解Android应用中preference首选项的编写方法

    `PreferenceManager`提供了获取默认首选项、设置默认首选项键值对等方法,而`SharedPreferences`则提供了读写首选项的方法。如果不使用PreferenceActivity,就需要手动处理数据的保存和读取。 在实际开发中,通过...

    Preference的使用

    5. RingtonePreference:让用户选择手机中的铃声。 6. DialogPreference:作为基础类,用于创建自定义对话框式的Preference。 二、Preference的基本使用 1. 添加到XML布局:在res/xml目录下创建一个xml文件,例如...

    详解Android首选项框架的使用实例

    5. RingtonePreference:专门为设置铃声而设计,让用户可以从设备的可用铃声中选择一个。 首选项的存储机制: 当用户在首选项界面中修改设置时,Android系统会自动将这些修改写入/data/data/[PACKAGE_NAME]/shared_...

    Android Preference组件使用

    Preference主要实现一些配置数据,一些我们上次...Preference组件有ListPreference,EditTextPreference,CheckBoxPreference和SwitchPreference,相对于View中的ListView,EditText,CheckBox,Switch和RingtonePreference .

    精通ANDROID 3(中文版)1/2

    9.1.4 RingtonePreference  9.2 组织首选项  9.3 以编程方式操作首选项  9.4 使用首选项保存状态  9.5 参考资料  9.6 小结  第10章 探索安全性和权限  10.1 理解Android安全性模型  10.1.1 安全性...

    精通Android 3 (中文版)2/2

    9.1.4 RingtonePreference  9.2 组织首选项  9.3 以编程方式操作首选项  9.4 使用首选项保存状态  9.5 参考资料  9.6 小结  第10章 探索安全性和权限  10.1 理解Android安全性模型  10.1.1 安全性...

    Android至PreferenceActivity

    在Android开发过程中,经常需要为应用提供一个用户可配置的界面,以便于用户能够调整各种设置。PreferenceActivity正是Android平台提供的一个非常实用的功能,它允许开发者轻松地创建配置界面,并且通过共享偏好...

    android preference framework demo

    此DEMO内含基本的android preference framework的简单介绍,包括CheckboxPreference, RingtonePreference, EditTextPreference以及ListPreference。主要探究了一下android 怎么通过使用preference从而达到对用户定制...

    Android学习笔记之Shared Preference

    - **RingtonePreference**:用于选择铃声。 5. **监听偏好变更**: 若要在偏好值发生变化时执行某些操作,可以注册`OnSharedPreferenceChangeListener`: ```java preferences....

Global site tag (gtag.js) - Google Analytics