- 浏览: 471236 次
文章分类
最新评论
-
hxqneuq2012:
感谢博主分享。不过,文章贴了2遍哈。看着怪怪的: ...
Android高手进阶教程(二十一)---Android WebView的缓存!!! -
malen:
不错。试试去
strings.xml文件中提供占位符来格式化数据
Android中铃声总结【安卓源码解析一】
最近研究源码程序,改了改手机短信铃声的源码,最近总结了下铃声的代码,写个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类中的代码:
- <spanstyle="font-size:16px;color:#000000;">packagecom.cn.android.daming;
- importandroid.content.Intent;
- importandroid.content.SharedPreferences;
- importandroid.media.Ringtone;
- importandroid.media.RingtoneManager;
- importandroid.net.Uri;
- importandroid.os.Bundle;
- importandroid.preference.Preference;
- importandroid.preference.PreferenceActivity;
- importandroid.preference.PreferenceManager;
- importandroid.preference.PreferenceScreen;
- publicclassSoundSettingMainActivityextendsPreferenceActivity{
- privatestaticfinalintSMS_RINGTONE_PICKED=1;
- privatestaticfinalintPHONE_RINGTONE_PICKED=2;
- privatestaticfinalintALARM_RINGTONE_PICKED=3;
- privatestaticfinalintSDCARD_RINGTONE_PICKED=4;
- publicstaticfinalStringNOTIFICATION_RINGTONE="pref_notification_ringtone";
- publicstaticfinalStringNOTIFICATION_RINGTONE_TITLE_NAME="pref_notification_ringtone_name";
- publicstaticfinalStringPHONE_RINGTONE="pref_phone_ringtone";
- publicstaticfinalStringPHONE_RINGTONE_TITLE_NAME="pref_phone_ringtone_title_name";
- publicstaticfinalStringALARM_RINGTONE="pref_alarm_ringtone";
- publicstaticfinalStringALARM_RINGTONE_TITLE_NAME="pref_alarm_ringtone_title_name";
- publicstaticfinalStringSDCARD_RINGTONE="pref_sdcard_ringtone";
- publicstaticfinalStringSDCARD_RINGTONE_TITLE_NAME="pref_sdcard_ringtone_title_name";
- privateStringnotificationStr;
- privateStringphoneStr;
- privateStringalarmStr;
- privateStringsdcardStr;
- privatePreferencemMmsSoundsPref;
- privatePreferencemPhoneSoundsPref;
- privatePreferencemAlarmSoundsPref;
- privatePreferencemSdcardSoundsPref;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.preferences);
- setMessagePreferences();
- setDefaultPreferences();
- }
- privatevoidsetMessagePreferences(){
- mMmsSoundsPref=findPreference("pref_sms_ringtone");
- mPhoneSoundsPref=findPreference("pref_phone_ringtone");
- mAlarmSoundsPref=findPreference("pref_alarm_ringtone");
- mSdcardSoundsPref=findPreference("pref_sdcard_ringtone");
- }
- privatevoidsetDefaultPreferences(){
- SharedPreferencesinnersharedPreferences=PreferenceManager.getDefaultSharedPreferences(SoundSettingMainActivity.this);
- StringnotificationRingtoneTitleName=innersharedPreferences.getString(NOTIFICATION_RINGTONE_TITLE_NAME,null);
- if(notificationRingtoneTitleName!=null){
- mMmsSoundsPref.setSummary(notificationRingtoneTitleName);
- }else{
- mMmsSoundsPref.setSummary(getString(R.string.pref_summary_notification_ringtone));
- }
- StringphoneRingtoneTitleName=innersharedPreferences.getString(PHONE_RINGTONE_TITLE_NAME,null);
- if(phoneRingtoneTitleName!=null){
- mPhoneSoundsPref.setSummary(phoneRingtoneTitleName);
- }else{
- mPhoneSoundsPref.setSummary(getString(R.string.pref_summary_phone_ringtone));
- }
- StringalarmRingtoneTitleName=innersharedPreferences.getString(ALARM_RINGTONE_TITLE_NAME,null);
- if(alarmRingtoneTitleName!=null){
- mAlarmSoundsPref.setSummary(alarmRingtoneTitleName);
- }else{
- mAlarmSoundsPref.setSummary(getString(R.string.pref_summary_alarm_ringtone));
- }
- StringsdcardRingtoneTitleName=innersharedPreferences.getString(SDCARD_RINGTONE_TITLE_NAME,null);
- if(sdcardRingtoneTitleName!=null){
- mSdcardSoundsPref.setSummary(sdcardRingtoneTitleName);
- }else{
- mSdcardSoundsPref.setSummary(getString(R.string.pref_summary_sdcard_ringtone));
- }
- }
- @Override
- publicbooleanonPreferenceTreeClick(PreferenceScreenpreferenceScreen,
- Preferencepreference){
- if(preference==mMmsSoundsPref){
- doPickSmsRingtone();
- }
- elseif(preference==mPhoneSoundsPref){
- doPickPhoneRingtone();
- }
- elseif(preference==mAlarmSoundsPref){
- doPickAlarmRingtone();
- }
- elseif(preference==mSdcardSoundsPref){
- doPickSdcardRingtone();
- }
- returnsuper.onPreferenceTreeClick(preferenceScreen,preference);
- }
- privatevoiddoPickSmsRingtone(){
- SharedPreferencessharedPreferences=PreferenceManager.getDefaultSharedPreferences(this);
- notificationStr=sharedPreferences.getString(NOTIFICATION_RINGTONE,null);
- Intentintent=newIntent(RingtoneManager.ACTION_RINGTONE_PICKER);
- //Allowusertopick'Default'
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT,true);
- //Showonlyringtones
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
- //setthedefaultNotificationvalue
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI,RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
- //Don'tshow'Silent'
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,true);
- UrinotificationUri;
- if(notificationStr!=null){
- notificationUri=Uri.parse(notificationStr);
- //Putcheckmarknexttothecurrentringtoneforthiscontact
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,notificationUri);
- }else{
- //OtherwisepickdefaultringtoneUrisothatsomethingisselected.
- notificationUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
- //Putcheckmarknexttothecurrentringtoneforthiscontact
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,notificationUri);
- }
- //Launch!
- startActivityForResult(intent,SMS_RINGTONE_PICKED);
- }
- privatevoiddoPickPhoneRingtone(){
- SharedPreferencessharedPreferences=PreferenceManager.getDefaultSharedPreferences(this);
- phoneStr=sharedPreferences.getString(PHONE_RINGTONE,null);
- Intentintent=newIntent(RingtoneManager.ACTION_RINGTONE_PICKER);
- //Allowusertopick'Default'
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT,true);
- //Showonlyringtones
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_RINGTONE);
- //setthedefaultNotificationvalue
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI,RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE));
- //Don'tshow'Silent'
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,true);
- UriphoneUri;
- if(phoneStr!=null){
- phoneUri=Uri.parse(phoneStr);
- //Putcheckmarknexttothecurrentringtoneforthiscontact
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,phoneUri);
- }else{
- //OtherwisepickdefaultringtoneUrisothatsomethingisselected.
- phoneUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
- //Putcheckmarknexttothecurrentringtoneforthiscontact
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,phoneUri);
- }
- startActivityForResult(intent,PHONE_RINGTONE_PICKED);
- }
- privatevoiddoPickAlarmRingtone(){
- SharedPreferencessharedPreferences=PreferenceManager.getDefaultSharedPreferences(this);
- alarmStr=sharedPreferences.getString(ALARM_RINGTONE,null);
- Intentintent=newIntent(RingtoneManager.ACTION_RINGTONE_PICKER);
- //Allowusertopick'Default'
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT,true);
- //Showonlyringtones
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_ALARM);
- //setthedefaultNotificationvalue
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI,RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM));
- //Don'tshow'Silent'
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT,true);
- UrialarmUri;
- if(alarmStr!=null){
- alarmUri=Uri.parse(alarmStr);
- //Putcheckmarknexttothecurrentringtoneforthiscontact
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,alarmUri);
- }else{
- //OtherwisepickdefaultringtoneUrisothatsomethingisselected.
- alarmUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
- //Putcheckmarknexttothecurrentringtoneforthiscontact
- intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,alarmUri);
- }
- startActivityForResult(intent,ALARM_RINGTONE_PICKED);
- }
- privatevoiddoPickSdcardRingtone(){
- SharedPreferencessharedPreferences=PreferenceManager.getDefaultSharedPreferences(this);
- sdcardStr=sharedPreferences.getString(SDCARD_RINGTONE,null);
- UrisdcardUri=null;
- if(sdcardStr!=null){
- sdcardUri=Uri.parse(sdcardStr);
- }
- IntentinnerIntent=newIntent(Intent.ACTION_GET_CONTENT);
- innerIntent.setType("audio/*");
- //youcouldlookuptheframeworkthetypeofaudio,ifyoudon`twantusetheRecorderusethenotecode
- //innerIntent.setType("audio/aac");
- //innerIntent.setType("audio/mp3");
- //innerIntent.setType("audio/midi");
- //Putcheckmarknexttothecurrentringtoneforthiscontact
- innerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,sdcardUri);
- IntentwrapperIntent=Intent.createChooser(innerIntent,null);
- startActivityForResult(wrapperIntent,SDCARD_RINGTONE_PICKED);
- }
- @Override
- protectedvoidonResume(){
- setDefaultPreferences();
- super.onResume();
- }
- @Override
- protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
- SharedPreferencessharedPreferences=PreferenceManager.getDefaultSharedPreferences(this);
- SharedPreferences.Editoreditor=sharedPreferences.edit();
- if(resultCode!=RESULT_OK){
- return;
- }
- switch(requestCode){
- caseSMS_RINGTONE_PICKED:{
- UripickedUri=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{
- Ringtoneringtone=RingtoneManager.getRingtone(SoundSettingMainActivity.this,pickedUri);
- StringstrRingtone=ringtone.getTitle(SoundSettingMainActivity.this);
- editor.putString(NOTIFICATION_RINGTONE_TITLE_NAME,strRingtone);
- editor.putString(NOTIFICATION_RINGTONE,pickedUri.toString());
- editor.commit();
- }
- break;
- }
- casePHONE_RINGTONE_PICKED:{
- UripickedUri=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();
- Ringtoneringtone=RingtoneManager.getRingtone(SoundSettingMainActivity.this,pickedUri);
- StringstrRingtone=ringtone.getTitle(SoundSettingMainActivity.this);
- editor.putString(PHONE_RINGTONE_TITLE_NAME,strRingtone);
- editor.putString(PHONE_RINGTONE,pickedUri.toString());
- editor.commit();
- }
- break;
- }
- caseALARM_RINGTONE_PICKED:{
- UripickedUri=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{
- Ringtoneringtone=RingtoneManager.getRingtone(SoundSettingMainActivity.this,pickedUri);
- StringstrRingtone=ringtone.getTitle(SoundSettingMainActivity.this);
- editor.putString(ALARM_RINGTONE_TITLE_NAME,strRingtone);
- editor.putString(ALARM_RINGTONE,pickedUri.toString());
- editor.commit();
- }
- break;
- }
- caseSDCARD_RINGTONE_PICKED:{
- UripickedUri=data.getData();
- if(null!=pickedUri){
- notificationStr=pickedUri.toString();
- Ringtoneringtone=RingtoneManager.getRingtone(SoundSettingMainActivity.this,pickedUri);
- StringstrRingtone=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中的代码:
- <spanstyle="font-size:16px;"><?xmlversion="1.0"encoding="utf-8"?>
- <PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android">
- <PreferenceCategoryandroid: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中的代码:
- <spanstyle="font-size:16px;"><?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <stringname="hello">HelloWorld,SoundSettingMainActivity!</string>
- <stringname="app_name">SoundSettingApp</string>
- <stringname="pref_sounds_storage_title">大明原创SoundSetting</string>
- <stringname="pref_title_notification_ringtone">选择短信铃声</string>
- <stringname="pref_summary_notification_ringtone">默认短信铃声</string>
- <stringname="pref_title_phone_ringtone">选择手机铃声</string>
- <stringname="pref_summary_phone_ringtone">默认手机铃声</string>
- <stringname="pref_title_alarm_ringtone">选择闹钟铃声</string>
- <stringname="pref_summary_alarm_ringtone">默认闹钟铃声</string>
- <stringname="pref_title_sdcard_ringtone">选择Sdcard中的铃声</string>
- <stringname="pref_summary_sdcard_ringtone">默认Sdcard铃声</string>
- <stringname="select_ringtone_slient">静音</string>
- </resources>
- </span>
四、在AndroidManifest.xml中的代码:
- <spanstyle="font-size:16px;"><?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:android="http://schemas.android.com/apk/res/android"
- package="com.cn.android.daming"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdkandroid:minSdkVersion="8"/>
- <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
- <activityandroid:name=".SoundSettingMainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <actionandroid:name="android.intent.action.MAIN"/>
- <categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>完整代码下载地址:http://download.csdn.net/detail/wdaming1986/3736718
相关推荐
自己总结的Android Camera系统架构及源码分析,以framework和hal为主。
ANDROID SDK 源码解析 ANDROID SDK 源码解析 ANDROID SDK 源码解析
android framework层源码解析
SearchView源码解析 SearchView是一个搜索框控件,样式也挺好看的。这次解析主要围绕android.support.v7.widget包下的SearchView(API >= 7),android.widget.SearchView支持API >= 11, 另外有个android.support.v4...
安卓Android源码——安卓Android 解析json_dome.zip
Android安卓源码解析,比较详细的分析了Sytem.loadLibrary的源码,对于so文件的dump的点有非常好的借鉴意义
安卓Android源码——解析json_dome.zip
Android Zygote启动流程源码解析
安卓Android源码——比较通用的xml解析方法.rar
代码为博客的示例代码,有问题请博客中留言:http://blog.csdn.net/lmj623565791/article/details/38614699
《Android 源码设计模式解析与实战》不仅分析了Android源代码的设计模式,更结合实例演示了如何使用这些设计模式。看这本书,既能学到如何分析、学习Android源代码,又能提高自己架构设计水平 《Android 源码设计...
安卓Android源码——安卓Android 解析json_dome.rar
Android开发—SeeJoPlayer视频播放器源码解析.pdfAndroid开发—SeeJoPlayer视频播放器源码解析.pdf
老罗android 解析json数据源码
Android Toast使用解析附代码,实现类似WEB开发中的弹出层效果,当用户点击一个链接或操作按钮时,会弹出一个操作层(浮动层)或浮动菜单,进而执行下一步操作。本源码是使用Android中的Toast对象来模拟实现网页中的...
Android 13 android T 原生Settings 源码 source code 基于qcom release
android sdk 源码解析——旨在帮助Android开发者更好的学习Android!我们只是一群普通的程序员,但是,我们热爱分享,想热热闹闹的玩点有意义的事!如果你也想陪我们一起愉快的玩耍,欢迎加入我们!Issues认领分析...
第6章 butterknife依赖注入框架源码解析 第8章 eventbus异步框架源码解析 第9章 dagger2依赖注入框架源码解析 第10章 rxjava异步框架源码解析 第11章 picasso图片框架源码解析 第12章 课程总结
Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式解析与实战 Android源码设计模式...
Android应用源码之Android 解析json_dome.zip