AndroidFm模塊學習之四源碼解析(十一)

接上一篇,接下來看看android\vendor\qcom\opensource\fm\fmapp2\src\com\caf\fmradio\FmTags.javajava

當點擊FMRadio.java菜單的所有頻道選項,跳轉到FmTags.java類android

定義了一個ListView控件和一個簡單適配器數組

private ListView la;app

private ArrayAdapter<String> adapter;測試


使用Handler刷新UI界面code

private final Handler mHandler = newHandler();事件

使用迭代器private Iterator itr;get

將FmSharedPreferences類取出數據迭代化,再使用循環添加到字符數組裏,使用適配器顯示。it

 final Runnable mDisplayTagList = new Runnable() {
            public void run() {
                   String[] tags;
                   int l = 0;
 
                   tags = new String[FmSharedPreferences.num_tags];
                   for(int i = 0; i < FmSharedPreferences.MAX_NUM_TAG_TYPES; i++) {
                       if (FmSharedPreferences.tagList[i] != null) {
                          itr = FmSharedPreferences.tagList[i].iterator();
                          while(itr.hasNext())
                                tags[l++] = ((FmSharedPreferences.TAG_NAMES[i]) + "\n" +
                                              "\t" + (String)itr.next());
                       }
                   }
                   adapter = new ArrayAdapter(la.getContext(), android.R.layout.simple_list_item_1, tags);
                   la.setAdapter(adapter);
            }
       };
再分析一個FM耳機按鍵的類 android\vendor\qcom\opensource\fm\fmapp2\src\com\caf\fmradio\FMMediaButtonIntentReceiver.java
手機耳機控制音量或者其它,經過靜態註冊接收action(「android.intent.action.MEDIA_BUTTON」)io

按鍵監聽事件

KeyEvent event =(KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);


監聽是不是頭戴式耳機和點擊按下去的監聽
intkeycode = event.getKeyCode();
intkey_action = event.getAction();

發送一個附帶Intent.EXTRA_KEY_EVENT廣播去FMRadioService實現接聽實現一些功能。

KeyEvent.KEYCODE_HEADSETHOOK:監聽是不是頭戴式耳機

KeyEvent.ACTION_DOWN:監聽是否按下鍵

KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:暫停

KeyEvent.KEYCODE_MEDIA_PLAY 播放鍵

KeyEvent.KEYCODE_MEDIA_NEXT:短按=播放下一首音樂,長按=當前音樂快進

KeyEvent.KEYCODE_MEDIA_PREVIOUS:短按=播放上一首音樂,長按=當前音樂快退

歐標耳機才能測試出監聽事件

public class FMMediaButtonIntentReceiver extends BroadcastReceiver {   private static final String TAG = "FMMediaButtonIntentReceiver"; public static final String FM_MEDIA_BUTTON = "com.caf.fmradio.action.MEDIA_BUTTON"; public static final String AUDIO_BECOMING_NOISY = "com.caf.fmradio.action.AUDIO_BECOMING_NOISY"; public void onReceive(Context context, Intent intent) {        String action = intent.getAction();        if ((action != null) && action.equals(AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {            Log.d(TAG, "ACTION_AUDIO_BECOMING_NOISY intent received for ACTION_HEADSET_PLUG");            Intent i = new Intent(AUDIO_BECOMING_NOISY); context.sendBroadcast(i);        } else if ((action != null) && action.equals("android.intent.action.MEDIA_BUTTON")) {            KeyEvent event = (KeyEvent)                     intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);              if (event == null) {                return;            }            int keycode = event.getKeyCode();            int key_action = event.getAction();            if (((KeyEvent.KEYCODE_HEADSETHOOK == keycode) &&                (key_action == KeyEvent.ACTION_DOWN)) ||                (KeyEvent.KEYCODE_MEDIA_PAUSE == keycode) ||                (KeyEvent.KEYCODE_MEDIA_PLAY == keycode)) {                  Log.d(TAG, "ACTION_MEDIA_BUTTON intent received for ACTION_DOWN");                Intent i = new Intent(FM_MEDIA_BUTTON);                i.putExtra(Intent.EXTRA_KEY_EVENT, event);                context.sendBroadcast(i);            }        }

相關文章
相關標籤/搜索