アメブロにsyntax highlightないんですね...何かいいプラグインあったら教えてください...
Framework部分をコードベースで読み解き、Androidの仕組みを理解し、共有していきます。
間違っていたら教えてください。。。m(_ _)m
ソースコードは下記を見ています。
本日は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しかありませんが、ここにキーコードと、それを受けとるコンポーネントを記載する事で、
特定のキーを押された時に好きなアプリを起動させる事ができるようです。