Android FM模块学习之四源码分析(3)
接着看FM模块的其他几个次要的类的源码。这样来看FM上层的东西不是太多。
请看android\vendor\qcom\opensource\fm\fmapp2\src\com\caf\fmradio\Settings.java
protected void onCreate(BundlesavedInstanceState)
从FMRadio.java用使用Intent跳转携带参数过来,在onCreate获取携带数据。
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Intent intent = getIntent();
- if (intent != null) {
- mRxMode = intent.getBooleanExtra(RX_MODE, false);
- }
- mPrefs = new FmSharedPreferences(this);
- if (mPrefs != null) {
- setPreferenceScreen(createPreferenceHierarchy());
- }
- }
private PreferenceScreen createPreferenceHierarchy() 初始化创建收音机设置里显示控件
- private PreferenceScreen createPreferenceHierarchy() {
- int index = 0;
- if (mPrefs == null) {
- return null;
- }
- // Root
- PreferenceScreen root = getPreferenceManager().createPreferenceScreen(
- this);
- summaryBandItems = getResources().getStringArray(
- R.array.regional_band_summary);
- chSpacingItems = getResources().getStringArray(
- R.array.channel_spacing_entries);
- mBandPreference = new ListPreference(this);
- mBandPreference.setEntries(R.array.regional_band_entries);
- mBandPreference.setEntryValues(R.array.regional_band_values);
- mBandPreference.setDialogTitle(R.string.sel_band_menu);
- mBandPreference.setKey(REGIONAL_BAND_KEY);
- mBandPreference.setTitle(R.string.regional_band);index = FmSharedPreferences.getCountry();
- Log.d(LOGTAG, "createPreferenceHierarchy: Country: " + index);
- // Get the preference and list the value.
- if ((index < 0) || (index >= summaryBandItems.length)) {
- index = 0;
- }
- mBandPreference.setValueIndex(index);
- root.addPreference(mBandPreference);
- mChannelSpacingPref = new ListPreference(this);
- mChannelSpacingPref.setEntries(R.array.channel_spacing_entries);
- mChannelSpacingPref.setEntryValues(R.array.channel_spacing_val);
- mChannelSpacingPref.setDialogTitle(R.string.sel_chanl_spacing);
- mChannelSpacingPref.setTitle(R.string.chanl_spacing);
- mChannelSpacingPref.setKey(CHAN_SPACING_KEY);
- mUserBandMinPref = new EditTextPreference(this);
- mUserBandMinPref.setKey(USER_DEFINED_BAND_MIN_KEY);
- mUserBandMinPref.setTitle(R.string.usr_def_band_min);
- mUserBandMinPref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER |
- InputType.TYPE_NUMBER_FLAG_DECIMAL);
- mUserBandMinPref.setDialogTitle(R.string.usr_def_band_min);
- mUserBandMaxPref = new EditTextPreference(this);
- mUserBandMaxPref.setKey(USER_DEFINED_BAND_MAX_KEY);
- mUserBandMaxPref.setTitle(R.string.usr_def_band_max);
- mUserBandMaxPref.setDialogTitle(R.string.usr_def_band_max);
- mUserBandMaxPref.getEditText().setInputType(InputType.TYPE_CLASS_NUMBER |
- InputType.TYPE_NUMBER_FLAG_DECIMAL);
- setBandSummary(index);
- if (mRxMode) {
- // Audio Output (Stereo or Mono)
- summaryAudioModeItems = getResources().getStringArray(
- R.array.ster_mon_entries);
- mAudioPreference = new ListPreference(this);
- mAudioPreference.setEntries(R.array.ster_mon_entries);
- mAudioPreference.setEntryValues(R.array.ster_mon_values);
- mAudioPreference.setDialogTitle(R.string.sel_audio_output);
- mAudioPreference.setKey(AUDIO_OUTPUT_KEY);
- mAudioPreference.setTitle(R.string.aud_output_mode);
- boolean audiomode = FmSharedPreferences.getAudioOutputMode();
- if (audiomode) {
- index = 0;
- } else {
- index = 1;
- }
- Log.d(LOGTAG, "createPreferenceHierarchy: audiomode: " + audiomode);
- mAudioPreference.setSummary(summaryAudioModeItems[index]);
- mAudioPreference.setValueIndex(index);
- // AF Auto Enable (Checkbox)
- mAfPref = new CheckBoxPreference(this);
- mAfPref.setKey(AUTO_AF);
- mAfPref.setTitle(R.string.auto_select_af);
- mAfPref.setSummaryOn(R.string.auto_select_af_enabled);
- mAfPref.setSummaryOff(R.string.auto_select_af_disabled);
- boolean bAFAutoSwitch = FmSharedPreferences.getAutoAFSwitch();
- Log.d(LOGTAG, "createPreferenceHierarchy: bAFAutoSwitch: "
- + bAFAutoSwitch);
- mAfPref.setChecked(bAFAutoSwitch);
- root.addPreference(mAfPref);
- if(FMRadio.RECORDING_ENABLE) {
- summaryRecordItems = getResources().getStringArray(
- R.array.record_durations_entries);
- int nRecordDuration = 0;
- mRecordDurPreference = new ListPreference(this);
- mRecordDurPreference.setEntries(R.array.record_durations_entries);
- mRecordDurPreference.setEntryValues(R.array.record_duration_values);
- mRecordDurPreference.setDialogTitle(R.string.sel_rec_dur);
- mRecordDurPreference.setKey(RECORD_DURATION_KEY);
- mRecordDurPreference.setTitle(R.string.record_dur);
- nRecordDuration = FmSharedPreferences.getRecordDuration();
- Log.d(LOGTAG, "createPreferenceHierarchy: recordDuration: "
- + nRecordDuration);
- switch(nRecordDuration) {
- case FmSharedPreferences.RECORD_DUR_INDEX_0_VAL:
- index = 0;
- break;
- case FmSharedPreferences.RECORD_DUR_INDEX_1_VAL:
- index = 1;
- break;
- case FmSharedPreferences.RECORD_DUR_INDEX_2_VAL:
- index = 2;
- break;
- case FmSharedPreferences.RECORD_DUR_INDEX_3_VAL:
- index = 3;
- break;
- }
- // Get the preference and list the value.
- if ((index < 0) || (index >= summaryRecordItems.length)) {
- index = 0;
- }
- Log.d(LOGTAG, "createPreferenceHierarchy: recordDurationSummary: "
- + summaryRecordItems[index]);
- mRecordDurPreference.setSummary(summaryRecordItems[index]);
- mRecordDurPreference.setValueIndex(index);
- root.addPreference(mRecordDurPreference);
- }
- }
- mRestoreDefaultPreference = new Preference(this);
- mRestoreDefaultPreference.setTitle(
- R.string.settings_revert_defaults_title);
- mRestoreDefaultPreference.setKey(RESTORE_FACTORY_DEFAULT);
- mRestoreDefaultPreference
- .setSummary(R.string.settings_revert_defaults_summary);
- mRestoreDefaultPreference.setOnPreferenceClickListener(this);
- root.addPreference(mRestoreDefaultPreference);
- return root;
- }
public void clearStationList()清除显示列表的电台。
- public void clearStationList() {
- SharedPreferences sp = getSharedPreferences(FMRadio.SCAN_STATION_PREFS_NAME, 0);
- SharedPreferences.Editor editor = sp.edit();
- editor.clear();
- editor.commit();
- }
public void onSharedPreferenceChanged(SharedPreferencessharedPreferences, String key) ListPerences的监听事件,电台信息改变
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
- String key) {
- int mTunedFreq = 0;
- boolean bStatus = false;
- if (key.equals(REGIONAL_BAND_KEY)) {
- int curListIndex = FmSharedPreferences.getCurrentListIndex();
- PresetList curList = FmSharedPreferences.getStationList(curListIndex);
- String valueStr = sharedPreferences.getString(key, "");
- int index = 0;
- if(valueStr != null) {
- index = mBandPreference.findIndexOfValue(valueStr);
- }
- if((index < 0) || (index >= summaryBandItems.length)) {
- index = 0;
- mBandPreference.setValueIndex(0);
- }else if((index + 1) == summaryBandItems.length) {
- mChannelSpacingPref.setEnabled(true);
- }else {
- mChannelSpacingPref.setEnabled(false);
- }
- Log.d(LOGTAG, "onSharedPreferenceChanged: Country Change: "
- + index);
- FmSharedPreferences.setCountry(index);
- setBandSummary(index);
- sendSettingsChangedIntent(FM_BAND_CHANGED);
- if (curList != null) {
- curList.clear();
- }
- clearStationList();
- }else if(key.equals(CHAN_SPACING_KEY)) {
- int curListIndex = FmSharedPreferences.getCurrentListIndex();
- PresetList curList = FmSharedPreferences.getStationList(curListIndex);
- String valStr = mChannelSpacingPref.getValue();
- int index = 0;
- if(valStr != null) {
- index = mChannelSpacingPref.findIndexOfValue(valStr);
- }
- if ((index < 0) || (index >= chSpacingItems.length)) {
- index = 0;
- mChannelSpacingPref.setValueIndex(0);
- }
- mChannelSpacingPref.setSummary(chSpacingItems[index]);
- FmSharedPreferences.setChSpacing(2 - index);
- sendSettingsChangedIntent(FM_CHAN_SPACING_CHANGED);
- if(curList != null) {
- curList.clear();
- }
- clearStationList();}else if(key.equals(USER_DEFINED_BAND_MIN_KEY)) {
- String valStr = mUserBandMinPref.getText();
- double freq = 0;
- try {
- freq = Double.parseDouble(valStr) * 1000;
- }catch(NumberFormatException e) {
- e.printStackTrace();
- return;
- }
- max_freq = FmSharedPreferences.getUpperLimit();
- min_freq = FmSharedPreferences.getLowerLimit();
- if((freq > 0) && (freq < max_freq) && (freq >= 76000)) {
- FmSharedPreferences.setLowerLimit((int)freq);
- sendSettingsChangedIntent(FM_BAND_CHANGED);
- setBandSummary(summaryBandItems.length - 1);
- clearStationList();
- }else {
- Toast.makeText(this, getString(R.string.user_defind_band_msg),
- Toast.LENGTH_SHORT).show();
- } }else if(key.equals(USER_DEFINED_BAND_MAX_KEY)) {
- String valStr = mUserBandMaxPref.getText();
- double freq = 0;
- try {
- freq = Double.parseDouble(valStr) * 1000;
- }catch(NumberFormatException e) {
- e.printStackTrace();
- return;
- }
- min_freq = FmSharedPreferences.getLowerLimit();
- max_freq = FmSharedPreferences.getUpperLimit();
- if((freq > 0) && (freq > min_freq) && (freq <= 108000)) {
- FmSharedPreferences.setUpperLimit((int)freq);
- sendSettingsChangedIntent(FM_BAND_CHANGED);
- setBandSummary(summaryBandItems.length - 1);
- clearStationList();
- }else {
- Toast.makeText(this, getString(R.string.user_defind_band_msg),
- Toast.LENGTH_SHORT).show();
- }
- }else {
- if(mRxMode) { if (key.equals(AUTO_AF)) {
- boolean bAFAutoSwitch = mAfPref.isChecked();
- Log.d(LOGTAG, "onSharedPreferenceChanged: Auto AF Enable: "
- + bAFAutoSwitch);
- FmSharedPreferences.setAutoAFSwitch(bAFAutoSwitch);
- mPrefs.Save();
- sendSettingsChangedIntent(FM_AF_OPTION_CHANGED);
- }else if(key.equals(RECORD_DURATION_KEY)) {
- if(FMRadio.RECORDING_ENABLE) {
- String valueStr = mRecordDurPreference.getValue();
- int index = 0;
- if (valueStr != null) {
- index = mRecordDurPreference.findIndexOfValue(valueStr);
- }
- if ((index < 0) || (index >= summaryRecordItems.length)) {
- index = 0;
- mRecordDurPreference.setValueIndex(index);
- }
- Log.d(LOGTAG, "onSharedPreferenceChanged: recorddur: "
- + summaryRecordItems[index]);
- mRecordDurPreference.setSummary(summaryRecordItems[index]);
- FmSharedPreferences.setRecordDuration(index);
- }
- } else if (key.equals(AUDIO_OUTPUT_KEY)) {String valueStr = mAudioPreference.getValue();
- int index = 0;
- if (valueStr != null) {
- index = mAudioPreference.findIndexOfValue(valueStr);
- }
- if (index != 1) {
- if (index != 0) {
- index = 0;
- /* It shud be 0(Stereo) or 1(Mono) */
- mAudioPreference.setValueIndex(index);
- }
- }
- Log.d(LOGTAG, "onSharedPreferenceChanged: audiomode: "
- + summaryAudioModeItems[index]);
- mAudioPreference.setSummary(summaryAudioModeItems[index]);
- if (index == 0) {
- // Stereo
- FmSharedPreferences.setAudioOutputMode(true);
- }else {
- // Mono
- FmSharedPreferences.setAudioOutputMode(false);
- }
- mPrefs.Save();
- sendSettingsChangedIntent(FM_AUDIO_MODE_CHANGED);
- }
- }
- }
- if (mPrefs != null) {
- if(bStatus) {
- mPrefs.Save();
- }else {
- mTunedFreq = FmSharedPreferences.getTunedFrequency();
- if (mTunedFreq > FmSharedPreferences.getUpperLimit() ||
- mTunedFreq < FmSharedPreferences.getLowerLimit()) {
- FmSharedPreferences.setTunedFrequency(
- FmSharedPreferences.getLowerLimit());
- }
- mPrefs.Save();
- }
- }
- }
public boolean onPreferenceClick(Preferencepreference) 收音机恢复出厂设置监听事件,后fm播放状态显示对话框,调用restoreSettingsDefault()存入初始化数据。
- public boolean onPreferenceClick(Preference preference) {
- boolean handled = false;
- if (preference == mRestoreDefaultPreference) {
- showDialog(RESTORE_FACTORY_DEFAULT_INT);
- }
- return handled;
- }
ListPreferences属性注册:
- private void restoreSettingsDefault() {
- if (mPrefs != null) {
- if (Locale.getDefault().equals(Locale.CHINA)) {
- mBandPreference
- .setValueIndex(FmSharedPreferences.REGIONAL_BAND_CHINA);
- }else{
- mBandPreference
- .setValueIndex(FmSharedPreferences.REGIONAL_BAND_INDONESIA);
- }
- if (mRxMode) { mAudioPreference.setValueIndex(0);
- if (FMRadio.RECORDING_ENABLE) {
- mRecordDurPreference.setValueIndex(0);
- }
- mAfPref.setChecked(true);
- FmSharedPreferences.SetDefaults();
- }else {
- if (Locale.getDefault().equals(Locale.CHINA)) {
- FmSharedPreferences
- .setCountry(FmSharedPreferences.REGIONAL_BAND_CHINA);
- }else{FmSharedPreferences
- .setCountry(FmSharedPreferences.REGIONAL_BAND_INDONESIA);
- }
- }
- mPrefs.Save();
- }
- }
onResume()方法
- protected void onResume() {
- super.onResume();
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- SharedPreferences sharedPreferences = null;
- if (preferenceScreen != null) {
- sharedPreferences = preferenceScreen.getSharedPreferences();
- }
- if (sharedPreferences != null) {
- sharedPreferences.registerOnSharedPreferenceChangeListener(this);
- }
- }
haredPreferences.registerOnSharedPreferenceChangeListener(this);进行注册
protected void onPause()方法
- protected void onPause() {
- super.onPause();
- PreferenceScreen preferenceScreen = getPreferenceScreen();
- SharedPreferences sharedPreferences = null;
- if (preferenceScreen != null) {
- sharedPreferences = preferenceScreen.getSharedPreferences();
- }
- if (sharedPreferences != null) {
- sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
- }
- }
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);卸载注册
private void setBandSummary(int index) 设置ListPreference控件选择地区频率范围后现实在控件上
- private void setBandSummary(int index) {
- if((index + 1) == summaryBandItems.length) {
- min_freq = FmSharedPreferences.getLowerLimit();
- max_freq = FmSharedPreferences.getUpperLimit();
- chan_spacing = FmSharedPreferences.getChSpacing();
- if(chan_spacing < 0) {
- chan_spacing = 0;
- }
- mBandPreference.setSummary(summaryBandItems[index] + "( "
- + (min_freq / 1000.0) +"Mhz To " + (max_freq / 1000.0) +
- "Mhz)");
- mChannelSpacingPref.setValueIndex(2 - chan_spacing);
- mChannelSpacingPref.setSummary(chSpacingItems[2 - chan_spacing]);
- mChannelSpacingPref.setEnabled(true);
- mUserBandMinPref.setEnabled(true);mUserBandMaxPref.setEnabled(true);
- mUserBandMinPref.setSummary((min_freq / 1000.0) + "Mhz");
- mUserBandMaxPref.setSummary((max_freq / 1000.0) + "Mhz");
- }else {
- mBandPreference.setSummary(summaryBandItems[index]);
- mChannelSpacingPref.setEnabled(false);
- mUserBandMinPref.setEnabled(false);
- mUserBandMaxPref.setEnabled(false);
- }
- }
private void displayToast(String msg)实现Toast提示
- private void displayToast(String msg) {
- Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
- }
private void sendSettingsChangedIntent(intaction)
发送广播action活动状态,
在FMRadio.java的registerFMSettingListner()方法接受(每次走
FMRadio.java的activity都会接受下广播)。
- private void sendSettingsChangedIntent(int action) {
- Intent intent = new Intent(ACTION_FM_SETTING);
- intent.putExtra("state", action);
- Log.d(LOGTAG, "Sending FM SETTING Change intent for = " + action);
- getApplicationContext().sendBroadcast(intent);
- }
- 总结:比较简单,过一遍即可。
Android FM模块学习之四源码分析(3)的更多相关文章
- Android FM 模块学习之四 源码解析(1)
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 前一章我们了解了FM手动调频,接下 ...
- Android FM模块学习之四源码解析(一)
转自:http://blog.csdn.net/tfslovexizi/article/details/41516149?utm_source=tuicool&utm_medium=refer ...
- Android FM模块学习之四源码学习(2)
前几章我们分析了FM模块的几个主要的类文件,今天要分析的是:FMTransceiver.java // 某些工程中名称为FMRadioService.java public class FmTra ...
- Android Small插件化框架源码分析
Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...
- socketserver模块使用与源码分析
socketserver模块使用与源码分析 前言 在前面的学习中我们其实已经可以通过socket模块来建立我们的服务端,并且还介绍了关于TCP协议的粘包问题.但是还有一个非常大的问题就是我们所编写的S ...
- DotNetty网络通信框架学习之源码分析
DotNetty网络通信框架学习之源码分析 有关DotNetty框架,网上的详细资料不是很多,有不多的几个博友做了简单的介绍,也没有做深入的探究,我也根据源码中提供的demo做一下记录,方便后期查阅. ...
- Android图片处理神器BitmapFun源码分析
作为一名Android开发人员,相信大家对图片OOM的问题已经耳熟能详了,关于图片缓存和解决OOM的开源项目也是相当的多,被大家熟知的就是Universal_image_loader和Volley了, ...
- Android View事件分发-从源码分析
View事件分发-从源码分析 学习自 <Android开发艺术探索> https://blog.csdn.net/qian520ao/article/details/78555397?lo ...
- [置顶]
【Android实战】----从Retrofit源码分析到Java网络编程以及HTTP权威指南想到的
一.简介 接上一篇[Android实战]----基于Retrofit实现多图片/文件.图文上传中曾说非常想搞明白为什么Retrofit那么屌.最近也看了一些其源码分析的文章以及亲自查看了源码,发现其对 ...
随机推荐
- sql函数PadLeft与PadRight代码实例
1.PadLeft函数向已知字符串左边补充字符,使整个字符串到达指定长度 CREATE FUNCTION PadLeft ( ),/*原始字符*/ @TotalLength int,/*总长度*/ ) ...
- CSS3之尖角标签
如图所示,Tag标签的制作通常使用背景图片,现在用CSS3代码就能实现尖角效果(需浏览器支持CSS3属性). 运用CSS3样式实现尖角标签,只需要写简单的HTML结构和CSS样式. <p> ...
- 在caffe中使用hdf5的数据
caffe默认使用的数据格式为lmdb文件格式,它提供了把图片转为lmdb文件格式的小程序,但是呢,我的数据为一维的数据,我也要分类啊,那我怎么办?肯定有办法可以转为lmdb文件格式的,我也看了一些源 ...
- JavaScipt的秘密花园
对象使用和属性 JavaScript 中所有变量都可以当作对象使用,除了两个例外 null 和undefined. false.toString(); // 'false'[1, 2, 3].toSt ...
- Python学习笔记----序列共性
序列操作符 作用seq[ind] 获得下标为ind 的元素seq[ind1:ind2] 获得下标从ind1 到ind2 间的元素集合seq * expr 序列重复expr 次seq1 + seq2 连 ...
- 关于strcpy和memcpy
strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符.已知strcpy函 ...
- 转-浅谈HTTP中Get与Post的区别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP ...
- Hadoop技术内幕-第一章 阅读原代码前的准备
1.1 源代码学习环境 1.1.1 基础软件的下载 JDK-http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...
- Windows Store App 关键帧动画
关键帧动画和插值动画类似,同样可以根据目标属性值的变化产生相应的动画效果,不同的是,插值动画是在两个属性值之间进行渐变,而关键帧动画打破了仅通过两个属性值控制动画的局限性,它可以在任意多个属性值之间进 ...
- 编写HTML表单提交并接受数据信息(获取用户通过表单提交的内容)
MyInfoForm.java package com.fxl; import java.io.IOException; import java.io.PrintWriter; import java ...