铃声设置的流程
来源:互联网 发布:初中学历可以学编程吗 编辑:程序博客网 时间:2024/04/29 19:46
Android系统铃声设置的流程
Sound & notification
–> General —> Phone ringtone
Default notification sound
单卡情况下:
直接跳到RingtonePickerActivity这个list列表,进行选择铃声的操作。
双卡情况下:
调到选择sub sim卡的界面,待选择完sim卡,然后载调到RingtonePickerActivity这个list列表,进行选择铃声的操作。
到底是怎么跳转到RingtonePickerActvity界面的,因为在EditProfile界面并未看到任何显示或者隐式打开RingtonePickerActivity的入口。
以ringtone的设置为例:
private void initRingtone(PreferenceScreen parent) { //这里看到,找控件,也就是Phone ringtone这个preference,可以看出其实际为 DefaultRingtonePreference mVoiceRingtone = (DefaultRingtonePreference) parent.findPreference(KEY_RINGTONE); mVideoRingtone = (DefaultRingtonePreference) parent.findPreference(KEY_VIDEO_RINGTONE); mSipRingtone = (DefaultRingtonePreference) parent.findPreference(KEY_SIP_RINGTONE);}
在EditProfile中找不到跳转的入口,那就进入DefaultRingtonePreference去看下有没有,但是仍然找不到,只能找到onPrepareRingtonePickerIntent方法,看着像,但是并未有哪里执行了startActvity啊。
public class DefaultRingtonePreference extends RingtonePreference {。。。。}
那可以看到DefaultRingtonePreference 的父类为RingtonePreference ,所以可以看下,是不是在父类中有相应的解释,追踪到
frameworks/base/core/java/android/preference/RingtonePreference.java
果然找到了,父类内部实现了onclick事件,并且在其中调用onPrepareRingtonePickerIntent方法,将其中初始化的intent同样作为参数,start出去。现在就一目了然了。
@Overrideprotected void onClick() { // Launch the ringtone picker 那就是这里了,隐式得跳转,通过action Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER); onPrepareRingtonePickerIntent(intent); PreferenceFragment owningFragment = getPreferenceManager().getFragment(); if (owningFragment != null) { owningFragment.startActivityForResult(intent, mRequestCode); } else { getPreferenceManager().getActivity().startActivityForResult(intent, mRequestCode); }}
而且可以发现,其是以startActvityForResult的方式来跳转,那么必然有onActivityResult方法。
public boolean onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == mRequestCode) { if (data != null) { Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); if (callChangeListener(uri != null ? uri.toString() : "")) { //这里会调用onSaveRingtone方法 onSaveRingtone(uri); } } return true; } return false; }
正好可以对应到,在ringtonePicker列表中选择完毕铃声后,返回后设置了铃声的动作,这里在其子类DefaultRingtonePreference中完成了重写。
/** * Called when the ringtone is choosen, set the selected ringtone uri to framework * * @param ringtoneUri * the selected ringtone uri */ @Override protected void onSaveRingtone(Uri ringtoneUri) { //xxw int simNum = SubscriptionManager.from(getContext()).getActiveSubscriptionInfoCount(); if(simNum == 0){ Toast.makeText(mContext, mContext.getString(R.string.no_sim_card_tip), 2000).show(); }else {//xxw . SharedPreferences prefs = this.getContext().getSharedPreferences( "DefaultRingtonePreference", Context.MODE_PRIVATE); mSimId = prefs.getLong(PREF_SIM_ID_VALUME, -1); mProfileManager.setRingtoneUri(mKey, getRingtoneType(), mSimId, ringtoneUri); Log.d("kiki","onSaveRingtone ringtoneUri="+ringtoneUri.toString()); }//xxw }
阅读全文
0 0
- 铃声设置的流程
- android 铃声设置流程
- android 铃声设置流程讲解
- android 铃声设置流程讲解
- 设置铃声
- 设置铃声
- android_N上关机闹钟铃声问题_设置的铃声和播放的铃声不一样
- 我的Android进阶之旅------>Android系统设置默认来电铃声、闹钟铃声、通知铃声
- Android开发铃声的设置与播放
- Android 手机设置中铃声设置里的通知音量与铃声音量的分离
- 恢复出厂设置后默认铃声与烧机后的默认铃声不一致的问题
- Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声
- Android来电铃声默认设置的实现方法与如何设置语音来电的默认铃声
- Android来电铃声默认设置的实现方法与怎么设置语音来电的默认铃声
- Android来电铃声默认设置的实现方法与怎么设置语音来电的默认铃声
- 解决:铃声改变,来短信,短信设置中默认铃声的名称没有同步更新
- 如何添加以及删减特定的默认通知铃声,如何设置默认铃声
- Android设置自定义手机铃声、短信、通知及闹钟铃声的方法
- eclipse Android开发配置
- 用 Clonezilla 光盘还原分区镜像
- 【LeetCode算法练习(C++)】Remove Duplicates from Sorted Array
- 中国共产党十九次全国代表大会中出现的重大科技项目介绍
- [vijos1232]核电站问题
- 铃声设置的流程
- JavaScript中Function和var 的预解析(浅见)
- 关于char,varchar等SQLS中的数据类型
- Docker依赖的底层技术
- 【Codeforces763D】Timofey and a flat tree
- DBSCAN 聚类
- if 语句
- 腾讯云分布式数据库可用性系统实践
- @用法总结一