<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>アプリ開発者ブログ</title>
<link>https://ameblo.jp/x-satoru/</link>
<atom:link href="https://rssblog.ameba.jp/x-satoru/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>個人で開発したアプリの紹介や、技術情報について投稿していきます。</description>
<language>ja</language>
<item>
<title>Android Framework を読み解く ~GlobalKeyManager~</title>
<description>
<![CDATA[ <p>アメブロにsyntax highlightないんですね...何かいいプラグインあったら教えてください...</p><p>&nbsp;</p><p>Framework部分をコードベースで読み解き、Androidの仕組みを理解し、共有していきます。</p><p>間違っていたら教えてください。。。m(_ _)m</p><p>&nbsp;</p><p>ソースコードは下記を見ています。</p><p><a href="https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/policy/GlobalKeyManager.java">https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/policy/GlobalKeyManager.java</a></p><p>&nbsp;</p><p>本日はGlobalKey(ボリュームキーなど一般アプリでは直接ハンドリングできないキー)の仕組みを見てみます。</p><p>&nbsp;</p><p>まず、GlobalKeyを定義している箇所</p><p>&nbsp;</p><p>GlobalKeyManager.java</p><p>-------------------------------------------</p><p>&nbsp;</p><p><span style="color:#0000ff;">private static final</span> <span style="color:#cc0064;">String</span> TAG_KEY = <span style="color:#009944;">"key"</span>;</p><p>&nbsp;</p><p>&nbsp;</p><p><span style="color:#0000ff;">public</span> <span style="color:#cc0064;">GlobalKeyManager</span>(<span style="color:#cc0064;">Context</span> context) {</p><p>&nbsp; &nbsp; &nbsp; mKeyMapping = <span style="color:#0000ff;">new</span> <span style="color:#cc0064;">SparseArray</span>&lt;<span style="color:#cc0064;">ComponentName</span>&gt;();</p><p>&nbsp; &nbsp; &nbsp; loadGlobalKeys(context);</p><p>}</p><p>&nbsp;</p><p><span style="color:#0000ff;">private void</span> loadGlobalKeys(<span style="color:#cc0064;">Context</span> context) {</p><p>&nbsp; &nbsp; &nbsp; <span style="color:#cc0064;">XmlResourceParser</span> parser = <span style="color:#0000ff;">null</span>;</p><p>&nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">try</span> {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parser = context.getResources().getXml(com.android.internal.R.xml.global_keys);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#cc0064;">XmlUtils</span>.beginDocument(parser, TAG_GLOBAL_KEYS);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">int</span> version = parser.getAttributeIntValue(<span style="color:#0000ff;">null</span>, ATTR_VERSION, 0);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">if</span> (GLOBAL_KEY_FILE_VERSION == version) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">while</span> (<span style="color:#0000ff;">true</span>) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#cc0064;">XmlUtils</span>.nextElement(parser);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#cc0064;">String</span> element = parser.getName();</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">if</span> (element == <span style="color:#0000ff;">null</span>) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">break</span>;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#0000ff;">if</span> (TAG_KEY.equals(element)) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#cc0064;">String</span> keyCodeName = parser.getAttributeValue(<span style="color:#0000ff;">null</span>, ATTR_KEY_CODE);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#cc0064;">String</span> componentName = parser.getAttributeValue(null, ATTR_COMPONENT);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#0000ff;">int</span> keyCode = <span style="color:#cc0064;">KeyEvent</span>.keyCodeFromString(keyCodeName);</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#0000ff;">if</span> (keyCode != <span style="color:#cc0064;">KeyEvent</span>.KEYCODE_UNKNOWN) {</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mKeyMapping.put(keyCode, <span style="color:#cc0064;">ComponentName</span>.unflattenFromString(componentName));</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p><p>&nbsp; &nbsp; &nbsp; }</p><p>-------------------------------------------</p><p>&nbsp;</p><p>com.android.internal.R.xml.global_keysのファイルを読み込みんでいる。</p><p><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/xml/global_keys.xml">https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/xml/global_keys.xml</a></p><p>&nbsp;</p><p>ここにはコメントアウトされたxmlしかありませんが、ここにキーコードと、それを受けとるコンポーネントを記載する事で、</p><p>特定のキーを押された時に好きなアプリを起動させる事ができるようです。</p>
]]>
</description>
<link>https://ameblo.jp/x-satoru/entry-12489059799.html</link>
<pubDate>Mon, 01 Jul 2019 23:29:27 +0900</pubDate>
</item>
<item>
<title>『テンプレメール』のプライバシーポリシー</title>
<description>
<![CDATA[ <p>『テンプレメール』のプライバシーポリシー</p><p>&nbsp;</p><p>&nbsp;</p><p>『テンプレメール』は以下の権限が必要です。&nbsp;</p><p>以下の目的以外にあなたの情報を利用することは決してありません。</p><ul><li>連絡先<ul><li>連絡先アプリのデータの取得と表示に利用しています<ul><li>これによりメールアドレス/電話番号を入力する際に、メールアドレス/電話番号が自動的に入力されるため、それらを入力する手間を省くことができます。</li></ul></li><li>テンプレメールに入力されたデータは、アプリがインストールさている期間中アプリ内に保存します<ul><li>これにより次回テンプレメール起動時、メールアドレス/電話が自動的に入力されるため、それらを再入力する手間を省くことができます。</li><li>保存されたデータはアプリをアンインストールすると削除されます。</li></ul></li></ul></li></ul><p>&nbsp;</p><p>&nbsp;</p><p>最新バージョン：1.1.4</p><p>最新の更新日日：2019/08/07</p>
]]>
</description>
<link>https://ameblo.jp/x-satoru/entry-12484871309.html</link>
<pubDate>Sun, 23 Jun 2019 00:37:21 +0900</pubDate>
</item>
</channel>
</rss>
