1. 程式人生 > >android 按鍵聲音

android 按鍵聲音

http://www.360doc.com/content/13/1217/19/1698092_337948357.shtml

1.Android的audio流的型別有以下12種:

  1. /* The audio stream for phone calls */
  2.     publicstaticfinalint STREAM_VOICE_CALL = 0;//通話連線時的音訊流(通話聲)
  3.     /* The audio stream for system sounds */
  4.     publicstaticfinalint STREAM_SYSTEM = 1;//系統音訊流
  5.     /* The audio stream for the phone ring and message alerts */
  6.     publicstaticfinalint STREAM_RING = 2;//來電鈴聲
  7.     /* The audio stream for music playback */
  8.     publicstaticfinalint STREAM_MUSIC = 3;//媒體音訊流
  9.     /* The audio stream for alarms */
  10.     publicstaticfinalint STREAM_ALARM = 4;//鬧鐘音訊流
  11.     /* The audio stream for notifications */
  12.     publicstaticfinalint STREAM_NOTIFICATION = 
    5;//通知音訊流
  13.     /* @hide The audio stream for phone calls when connected on bluetooth */
  14.     publicstaticfinalint STREAM_BLUETOOTH_SCO = 6;//從註釋上看時使用藍芽耳機通話的音訊流
  15.     /* @hide The audio stream for enforced system sounds in certain countries (e.g camera in Japan) */
  16.     publicstaticfinalint STREAM_SYSTEM_ENFORCED = 
    7;//一些國家強制使用的音訊流??不太明白
  17.     /* @hide The audio stream for DTMF tones */
  18.     publicstaticfinalint STREAM_DTMF = 8;//DTMF音訊流
  19.     /* @hide The audio stream for text to speech (TTS) */
  20.     publicstaticfinalint STREAM_TTS = 9;//TTS: Text to Speech:檔案到語言的音訊流,即機器說話
  21.     /* @hide The audio stream for Fm */
  22.     publicstaticfinalint STREAM_FM = 10;//FM的音訊流
  23.     /* @hide The audio stream for MATV */
  24.     publicstaticfinalint STREAM_MATV = 11;//TV的音訊流

每種音訊流所規定的最大值:

  1. /** @hide Maximum volume index values for audio streams */
  2.  privateint[] MAX_STREAM_VOLUME = newint[] {  
  3.      6,  // STREAM_VOICE_CALL
  4.      7,  // STREAM_SYSTEM
  5.      7,  // STREAM_RING
  6.      12// STREAM_MUSIC
  7.      7,  // STREAM_ALARM
  8.      7,  // STREAM_NOTIFICATION
  9.      15// STREAM_BLUETOOTH_SCO
  10.      7,  // STREAM_SYSTEM_ENFORCED
  11.      15// STREAM_DTMF
  12.      15// STREAM_TTS
  13.      13//STREAM_FM
  14.      13//stream_MATV
  15.  };  

2.所有的按鍵事件都是touch事件,這部分我會另外開篇博文介紹。

開始本文正文,Anndroid系統中所有View帶有按鍵音,使用者可以通過Settings>Sound>勾選Audible Selection即可開啟按鍵音。但是有個奇怪的地方:此按鍵音是與媒體音量(即STREAM_MUSIC)繫結的,難道按鍵音的STREAM TYPE就是STREAM_MUSIC嗎?我們從程式碼中尋找一下。


首先所有的View點選的時候都有按鍵音,我們從View.java的點選事件找起,在view的響應的onTouchEvent()方法中有如下程式碼:


  1. switch (event.getAction()) {  
  2.                case MotionEvent.ACTION_UP:  
  3.                    boolean prepressed = (mPrivateFlags & PREPRESSED) != 0;  
  4.                    if ((mPrivateFlags & PRESSED) != 0 || prepressed) {  
  5.                        // take focus if we don't have it already and we should in
  6.                        // touch mode.
  7.                        boolean focusTaken = false;  
  8.                        if (isFocusable() && isFocusableInTouchMode() && !isFocused()) {  
  9.                            focusTaken = requestFocus();  
  10.                        }  
  11.                        if (!mHasPerformedLongPress) {  
  12.                            // This is a tap, so remove the longpress check
  13.                            removeLongPressCallback();  
  14.                            // Only perform take click actions if we were in the pressed state
  15.                            if (!focusTaken) {  
  16.                                // Use a Runnable and post this rather than calling
  17.                                // performClick directly. This lets other visual state
  18.                                // of the view update before click actions start.
  19.                                if (mPerformClick == null) {  
  20.                                    mPerformClick = new PerformClick();  
  21.                                }  
  22.                                if (!post(mPerformClick)) {  
  23.                                    performClick();//這裡響應click事件
  24.                                }  
  25.                            }  
  26.                        }  
  27.                        if (mUnsetPressedState == null) {  
  28.                            mUnsetPressedState = new UnsetPressedState();  
  29.                        }  
  30.                        if (prepressed) {  
  31.                            mPrivateFlags |= PRESSED;  
  32.                            refreshDrawableState();  
  33.                            postDelayed(mUnsetPressedState,  
  34.                                    ViewConfiguration.getPressedStateDuration());  
  35.                        } elseif (!post(mUnsetPressedState)) {  
  36.                            // If the post failed, unpress right now
  37.                            mUnsetPressedState.run();  
  38.                        }  
  39.                        removeTapCallback();  
  40.                    }  
  41.                    break;  

  1. publicboolean performClick() {  
  2.     sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);  
  3. 相關推薦

    android 按鍵聲音

    http://www.360doc.com/content/13/1217/19/1698092_337948357.shtml 1.Android的audio流的型別有以下12種: /* The audio stream for phone 

    Android 按鍵按下實現陰影效果

    nal turn view font .cn ges activity rda als final Button btn_gallery=(Button)findViewById(R.id.btn_gallery);btn_gallery.setOnClickListene

    android調節聲音大小

    狀態 不變 android 背景 sound tab ext 鈴聲 comment android調節聲音大小 1.背景音樂的一些知識 網上好多關於背景音樂添加用到的類: MediaPlayer,SoundPool,AudioManager的資料,可是有時候解決不了我們

    Android Studio 第七十一期 - Android 系統聲音控制

    圖片 geek cati hit ces ont sys http hub 代碼已經整理好,效果如下圖: 地址:https://github.com/geeklx/myapplication2018/tree/master/p014_systemvoi

    Android關於聲音播放(MediaPlayer)--如何改變播放速率

    喜歡折騰,最近想開發一款可以變速的音樂播放器,先做下技術調研。 百度&谷歌了一下,如果不做底層定製,整個mp3檔案播放在java層可以實現的方法主要是MediaPlayer。 而且,在Android 6.0+(23+)MediaPlayer可以通過setSpeed來改變播放速率

    appium控制Android按鍵

      按鍵的keycode,如下: KEYCODE_HOME Home鍵 3  KEYCODE_BACK 返回鍵 4  KEYCODE_CALL 撥號鍵 5  KEYCODE_ENDCALL 掛機鍵 6 KEYCODE_VOLUME_UP 音量增加鍵

    Android 按鍵訊息處理

    Android按鍵訊息處理     在android系統中,鍵盤按鍵事件是由SystemServer服務來管理的;然後在以訊息的形式分發給應用程式處理。產生鍵盤按鍵事件則是有Linux kernel的相關驅動來實現。 鍵盤訊息有別於其他型別的訊息;需要從Linux kernel drivers產生由上層ap

    Android按鍵事件傳遞流程(一)

    做Android開發的少不了對觸控、按鍵事件進行處理,對於手機來說,主要是手勢移動、觸控按下等,而TV主要通過遙控器、按鍵操作,按鍵事件不同於觸控事件,必須先獲得焦點,然後才能移動、選擇。 Android輸入裝置支援滑鼠、鍵盤(按鍵)、觸控式螢幕(單點、多點)、

    Android按鍵訊息處理

    Android按鍵訊息處理     在android系統中,鍵盤按鍵事件是由SystemServer服務來管理的;然後在以訊息的形式分發給應用程式處理。產生鍵盤按鍵事件則是有Linux

    Android 按鍵長按與短按識別

    在Android中已經有了長按與短按的識別,只是長按識別的時間比較短 ,大概在1s以上就認為是長按了。主要的思路是設定一個標誌位,利用事件相應次數函式event.getRepeatCount()來設定標誌位。主要用的函式是按鍵響應的三個函式 onKeyLongPress,o

    Android按鍵事件傳遞流程

    做Android開發的少不了對觸控、按鍵事件進行處理,對於手機來說,主要是手勢移動、觸控按下等,而TV主要通過遙控器、按鍵操作,按鍵事件不同於觸控事件,必須先獲得焦點,然後才能移動、選擇。 android輸入裝置支援滑鼠、鍵盤(按鍵)、觸控式螢幕(單點、多點)、

    Android聲音的處理一:MediaPlayer

    在android中有時候會要加一些背景音樂,或者在遊戲中需要新增一些遊戲音效。最近的工作中正好要遇到這方面的問題,就瞭解了下,現在把使用到的知識,做一下總結。   MediaPlayer使用起來簡單,適合做長時間的聲音播放,比如背景音樂。   下面是使用過程中的主要點:【注

    Android按鍵事件處理流程

     剛接觸Android開發的時候,對touch、key事件的處理總是一知半解,一會是Activity裡的方法,一會是各種View 中的,自己始終不清楚到底哪個在先哪個在後,總之對整個處理流程沒能很好的把握。每次寫這部分程式碼的時候都有些心虛, 因為我不是很清楚什麼時候、

    【轉載兩篇關於android按鍵事件傳遞的文章,流程非常完整】Android按鍵事件傳遞流程(二)

    5    應用層如何從Framework層接收按鍵事件 由3.2和4.5.4節可知,當InputDispatcher通過服務端管道向socket檔案描述符傳送訊息後,epoll機制監聽到了I/O事件,epoll_wait就會執行返回發生事件的個數給eve

    Android按鍵訊息傳播流程(WindowManagerService.java)

    主要涉及的檔案有: WindowManagerService.java   frameworks\base\services\java\com\android\server\ PhoneWindow.java                     frameworks\p

    android按鍵長按短按功能的實現策略

    定時器輪休的方式,根據取樣次數來區分長按還是短按 1.當按下鍵1的時候,就不斷的計數,直到你放手電壓值變化,再根據計數的次數判斷上報長按還是短按的功能 沒有按鍵的時候取樣率為HZ/4,取樣是HZ/40 static void  lradc1_data_function(u

    Android按鍵音(焦點)

    一、兩處呼叫playSoundEffect: 其一:繼承ViewGroup類的子類內部View切換;例如ViewPager frameworks/support/v4/java/android/support/v4/view/ViewPager.java public bo

    Android 按鍵防止過快點選(防抖),在ButterKnife中的簡單解決方案。

    其實自己也在網上找了一些防抖的方案,比如RxBinding啊,NoDoubleClickListener啊,原始解決方案啊等等,不過那都不是我想要的。 因為專案中使用了ButterKnife繫結控制元件和為控制元件註冊點選事件。所以上面搜到的那些方案都不太好使

    android 按鍵對映qwerty.kl檔案中的WAKE和WAKE_DROPPED的定義

    android系統中,獲取到鍵盤的鍵值後,會搜尋/system/usr/keylayout/gpio-keys.kl這個檔案 key 115   VOLUME_UP         WAKE_DROPPED key 114   VOLUME_DOWN       WAK

    Android按鍵事件——上層與驅動的對映

    原創:M_r_D 轉載請註明出處!     首先檢視android對上層按鍵事件的定義,在標頭檔案<KeycodeLabels.h>中: static const KeycodeLabel KEYCODES[] = { { "SOFT_LEFT", 1