1. 程式人生 > >android遮蔽音量鍵(做到完全沒聲音)

android遮蔽音量鍵(做到完全沒聲音)

先把系統預設的“音量調節”遮蔽掉,這裡需要重寫onKeyDown方法

onKeyDown 方法是KeyEvent.Callback 介面中的一個抽象方法,重寫onKeyDown 方法可以監聽到按鍵被按下的事件,我們先看看onKeyDown方法的函式原型。
  第一個引數為鍵值,手機中每一個按鈕都擁有一個完全獨立的鍵值 通過按鍵鍵值就可以確定當前按下的是那一個按鍵。
  第二個引數為按鍵事件, 該物件中儲存著當前按鍵的所有資訊 比如 按鍵發生的時間 按鍵發生的次數 按鍵發生的型別等等。
  通過以上兩個引數就可以拿到當前按鍵事件的所附帶的一切資訊。
  返回值 為true的時候表示完成了一次按鍵事件 這樣回撥方法就會處理一些事情,舉一個簡單的例子 我們在一個新activity中 程式碼中根本就沒有重寫onKeyDown這個方法可是點返回按鈕的時候發現當前這個activity自己關閉了。這是為什麼呢??
  在Android開發中,首先如果沒有重寫onKeyDown方法的話 父類就會預設呼叫自己的onKeyDown方法這樣如果按下按鍵了父類就會返回true 所以回撥方法系統會執行系統特定的功能,例如:音量鍵,返回鍵 ,如果說我們把onKeyDown的返回值直接寫成false 這樣系統就不知道你點選了返回鍵 回撥方法也不會幫我們執行系統特定的功能。

  public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
        Toast.makeText(this, "音量減", Toast.LENGTH_LONG).show();
        Log.e("LogUtils","音量減");
        return true;
    } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        Toast.makeText(this, "音量加", Toast.LENGTH_LONG).show();
        Log.e("LogUtils","音量加");
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

如果長按某一個按鍵的話 onKeyDown方法會反覆呼叫 並不是只調用一次 直到鬆開該按鍵為止。

這裡寫圖片描述
  

但是可以做到用音量鍵控制你需要的功能,也可以遮蔽音量調節,音量的確不能調節了,調節音量的對話方塊也確實遮蔽掉了,唯獨不能遮蔽掉調節音量的聲音;這時需要複寫onKeyUp()方法

onKeyUp 方法和 onKeyDown 同屬於KeyEvent.Callback 介面中的一個抽象方法 ,重寫onKeyUp 方法可以監聽到按鍵被擡起的事件,當然擡起的前提肯定是先被按下後才會被擡起,也就是說onKeyUp 方法如果執行那也肯定是先執行過 onKeyDown 方法。我們先看看onKeyUp 的函式原型。
  它和onKeyDown 方法的原理完全一樣 連引數都一樣, 區別就是一個處理按下事件 一個處理擡起時間。這就是為什麼還會有聲音了!

  @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
            Log.e("LogUtils","音量減,無聲");
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            Log.e("LogUtils","音量加,無聲");
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }

這時就沒聲音了!