編輯:關於Android編程
最近在學習FM模塊,FM是一個值得學習的模塊,可以從上層看到底層。上層就是FM的按扭操作和界面顯示,從而調用到FM底層驅動來實現廣播收聽的功能。
看看Fm啟動流程:如下圖:
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+z8i9+MjrRk1SYWRpby5qYXZhwOCjrG9uQ3JlYXRls/XKvLuv0rvQqcr9vt2jrLuts/ZGTb3nw+ajrMb0tq9mbdTab25TdGFydCgpt723qMDvxvS2r0ZNUmFkaW9TZXJ2aWNlLmphdmEgKLX308NiaW5kVG9TZXJ2aWNlKHRoaXMsIG9zYym3vbeoKaGjPC9wPgo8cD48aW1nIHNyYz0="/uploadfile/Collfiles/20141120/20141120083135115.jpg" alt="\">
注冊下fm設置(在設置後發送一個設置廣播,更新FMRadio類的狀態)。
加載初始化數據,獲取頻率地址
newPresetStation("",FmSharedPreferences.getTunedFrequency());
在bindToService(this,osc)方法中,先啟動StartService(同一個Service只onCreate一次),再啟動bindservice(這樣有個好處按返回鍵service不會走onDestroy方法)bindservice通過onBind回傳一個IBinder對象到FMRadio類的內部類ServiceConnection的onServiceConnected方法中,調用enableRadio()方法。
在enableRaido方法中調用FMRadio.java的isAntennaAvailable()方法進行耳機判斷,天線判斷是否可用,通過一個插入拔出廣播接收來控制的(FMRadio中的registerHeadsetListener()方法)action(Intent.ACTION_HEADSET_PLUG)
mHeadsetPlugged =(intent.getIntExtra("state", 0) == 1); 等於1說明耳機可用,等於0可用。
調用FmRadio方法FmOn (mService.fmOn())
界面可用enableRadioOnOffUI()
private void enableRadio() { mIsScaning = false; mIsSeeking = false; mIsSearching = false; boolean bStatus = false; if (isHdmiOn()) { showDialog(DIALOG_CMD_FAILED_HDMI_ON); }else { if (mService != null) { try { if((false == mService.isFmOn()) && isAntennaAvailable()) { bStatus = mService.fmOn(); if(bStatus) { tuneRadio(FmSharedPreferences.getTunedFrequency()); enableRadioOnOffUI(); }else {Log.e(LOGTAG, "mService.fmOn failed"); mCommandFailed = CMD_FMON; if(isCallActive()) { enableRadioOnOffUI(); showDialog(DIALOG_CMD_FAILED_CALL_ON); }else { showDialog(DIALOG_CMD_FAILED); } } }else {enableRadioOnOffUI(); } }catch (RemoteException e) { e.printStackTrace(); } } } }
在FMRadioService.java的fmOn()方法中初始化FmReceiver的引用mReceiver = newFmReceiver(FMRADIO_DEVICE_FD_STRING, fmCallbacks);
取出設置保存的地區頻率的屬性
FmConfig config =FmSharedPreferences.getFMConfiguration();
真正接受fm聲音在
bStatus =mReceiver.enable(FmSharedPreferences.getFMConfiguration());
isSpeakerEnabled()揚聲器可用,用戶設置揚聲器
設置鈴聲路徑
boolean state =mReceiver.setAnalogMode(analogMode); analogMode模擬設置低功率
bStatus = setLowPowerMode(false);
電話不在閒置狀太下
int state = getCallState();
fmActionOnCallState(state);
啟動FM startFM();設置耳機等可以接受fm聲音
AudioSystem.setForceUse(AudioSystem.FOR_MEDIA,AudioSystem.FORCE_NONE);
Fm設備可用
AudioSystem.setDeviceConnectionState(AudioSystem.DEVICE_OUT_FM,
AudioSystem.DEVICE_STATE_AVAILABLE, "");
注冊遠程組的處理
bStatus = mReceiver.registerRdsGroupProcessing(FmReceiver.FM_RX_RDS_GRP_RT_EBL|
FmReceiver.FM_RX_RDS_GRP_PS_EBL|
FmReceiver.FM_RX_RDS_GRP_AF_EBL|
FmReceiver.FM_RX_RDS_GRP_PS_SIMPLE_EBL);
可用自動跳轉到選著的頻率
bStatus =enableAutoAF(FmSharedPreferences.getAutoAFSwitch());
將內置天線設為0
FmTransceiver.java
FmReceiverJNI.setControlNative (sFd, V4L2_CID_PRIVATE_TAVARUA_ANTENNA,iAntenna)
mReceiver.setInternalAntenna(false)
這是個不錯的教程,自己學完了之後就拿出來分享了,本來想一個帖子寫完,但是發現這樣對自己寫博客的效率有點出入,為了讓大家看的舒服點,所以分開來寫,我們先開看下百度壁紙的客戶
百度定位的環境配置1. 獲取密鑰通過開放平台進行應用注冊獲取百度提供的appkey值,這個值用於進行定位時的認證。選擇android端app勾選所有權限進行app的注冊。
信息的發送,對於Mms應用程序來講主要就是在信息數據庫中創建並維護一條信息記錄,真正的發送過程交由底層(Frameworks層)函數來處理。總體的來講,當信息創建完成後,
本文實例為大家分享了ImageView陰影和圖層效果的實現代碼,供大家參考,具體內容如下import android.app.Activity; import andro