アメブロにsyntax highlightないんですね...何かいいプラグインあったら教えてください...

 

Framework部分をコードベースで読み解き、Androidの仕組みを理解し、共有していきます。

間違っていたら教えてください。。。m(_ _)m

 

ソースコードは下記を見ています。

https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/policy/GlobalKeyManager.java

 

本日はGlobalKey(ボリュームキーなど一般アプリでは直接ハンドリングできないキー)の仕組みを見てみます。

 

まず、GlobalKeyを定義している箇所

 

GlobalKeyManager.java

-------------------------------------------

 

private static final String TAG_KEY = "key";

 

 

public GlobalKeyManager(Context context) {

      mKeyMapping = new SparseArray<ComponentName>();

      loadGlobalKeys(context);

}

 

private void loadGlobalKeys(Context context) {

      XmlResourceParser parser = null;

      try {

            parser = context.getResources().getXml(com.android.internal.R.xml.global_keys);

            XmlUtils.beginDocument(parser, TAG_GLOBAL_KEYS);

            int version = parser.getAttributeIntValue(null, ATTR_VERSION, 0);

            if (GLOBAL_KEY_FILE_VERSION == version) {

            while (true) {

                  XmlUtils.nextElement(parser);

                  String element = parser.getName();

                  if (element == null) {

                      break;

                  }

                  if (TAG_KEY.equals(element)) {

                       String keyCodeName = parser.getAttributeValue(null, ATTR_KEY_CODE);

                       String componentName = parser.getAttributeValue(null, ATTR_COMPONENT);

                       int keyCode = KeyEvent.keyCodeFromString(keyCodeName);

                       if (keyCode != KeyEvent.KEYCODE_UNKNOWN) {

                           mKeyMapping.put(keyCode, ComponentName.unflattenFromString(componentName));

                      }

                  }

            }

      }

-------------------------------------------

 

com.android.internal.R.xml.global_keysのファイルを読み込みんでいる。

https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/xml/global_keys.xml

 

ここにはコメントアウトされたxmlしかありませんが、ここにキーコードと、それを受けとるコンポーネントを記載する事で、

特定のキーを押された時に好きなアプリを起動させる事ができるようです。