2013年11月17日日曜日
2013年11月3日日曜日
Andoird 4.4 KitKat StatusBarの変更点(基本設計編)
システムよりの確認です。
SystemServerをみる
config.disable_systemuiの設定次第で、ステータスバーを非表示にできる。 https://android.googlesource.com/platform/frameworks/base/+/android-4.4_r1/services/java/com/android/server/SystemServer.java
boolean disableSystemUI = SystemProperties.getBoolean("config.disable_systemui", false);
if (!disableSystemUI) {
try {
Slog.i(TAG, "Status Bar");
statusBar = new StatusBarManagerService(context, wm);
ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);
} catch (Throwable e) {
reportWtf("starting StatusBarManagerService", e);
}
}
SystemUiをみる
そもそも、Tablet用のフォルダがなくなった。すでに、JBでは使われていなかった。(※Nexus系の端末) https://android.googlesource.com/platform/frameworks/base/+/android-4.4_r1/packages/SystemUI/src/com/android/systemui/statusbar/TV用は?
相変わらず、スケルトン。モジュールの定義のみ。 https://android.googlesource.com/platform/frameworks/base/+/android-4.4_r1/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java2013年11月2日土曜日
4.4 KitKatの表示レイヤーについて
android-4.4_r1がAOSP上で公開されました。
毎度おなじみの表示レイヤーのチェックを行いました。
(★ = 4.4_r1にて新規追加されたレイヤー)
大きな変更点は
アプリケーション開発者にはあまり関係ありませんが、Frameworksのカスタム作業がメインの方、WindowManagerServiceとKeyguard周りを調査しましょう。
毎度おなじみの表示レイヤーのチェックを行いました。
確認OSバージョン
android-4.4_r1 KitKat表示レイヤー
OSのメジャーアップデートなので、表示レイヤーの変更点があるかどうか確認しました。ソース
android-4.4_r1/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java(★ = 4.4_r1にて新規追加されたレイヤー)
| 値 | レイヤー名 | 用途 |
|---|---|---|
| 1 | TYPE_UNIVERSE_BACKGROUND | |
| 2 | TYPE_PRIVATE_PRESENTATION | |
| 2 | TYPE_WALLPAPER | 壁紙 |
| 3 | TYPE_PHONE | 着信などの電話用 |
| 4 | TYPE_SEARCH_BAR | 検索バー |
| 5 | TYPE_RECENTS_OVERLAY | 履歴 |
| 5 | TYPE_SYSTEM_DIALOG | 電源OFFダイアログなどのシステムダイアログ |
| 6 | TYPE_TOAST | トースト表示 |
| 7 | TYPE_PRIORITY_PHONE | SIMエラー表示など |
| 8 | TYPE_DREAM | Dream用レイヤー |
| 9 | SYSTEM_ALERT_LAYER | ANRやLowバッテリー通知 |
| 10 | TYPE_INPUT_METHOD | 文字入力UI |
| 11 | TYPE_INPUT_METHOD | 文字入力UIのダイアログ |
| 12 | TYPE_KEYGUARD_SCRIM | ★keyguardが起動するまでの間、Keyguardの後ろに表示する |
| 13 | TYPE_KEYGUARD | キーガード表示 |
| 14 | TYPE_KEYGUARD_DIALOG | シャットダウン中やSIMロック表示、キーガード表示中の電源OFFダイアログなど |
| 15 | TYPE_STATUS_BAR_SUB_PANEL | Phone用expandしたパネル |
| 16 | TYPE_STATUS_BAR | StatusBar |
| 17 | TYPE_STATUS_BAR_PANEL | StatusBarをexpandしたパネル |
| 18 | TYPE_VOLUME_OVERLAY | ボリューム変更 |
| 19 | TYPE_SYSTEM_OVERLAY | キーガードより上位に表示するシステムオーバーレイ |
| 20 | TYPE_NAVIGATION_BAR | ナビゲーションBar |
| 21 | TYPE_NAVIGATION_BAR_PANEL | ナビゲーションBarの上に表示するために必要なパネル(searchなど) |
| 22 | TYPE_SYSTEM_ERROR | システムエラー通知 |
| 23 | TYPE_MAGNIFICATION_OVERLAY | 拡大表示用 |
| 24 | TYPE_DISPLAY_OVERLAY | Secondaryディスプレイ用 |
| 25 | TYPE_DRAG | ドラッグ&ドロップ操作用 |
| 26 | TYPE_SECURE_SYSTEM_OVERLAY | |
| 27 | TYPE_BOOT_PROGRESS | Boot中のDialog表示 |
| 28 | TYPE_POINTER | マウスポインター |
| 29 | TYPE_HIDDEN_NAV_CONSUMER | FakeWindow用 |
大きな変更点は
- TYPE_KEYGUARD_SCRIMの追加
アプリケーション開発者にはあまり関係ありませんが、Frameworksのカスタム作業がメインの方、WindowManagerServiceとKeyguard周りを調査しましょう。
2013年9月23日月曜日
IngressのComm風タブを作成してみた
IngressのComm風タブを作成してみました。
引っ張り上げると、View内のコンテンツが表示されます。
ライセンスはMITライセンスです。
https://github.com/baroqueworksdev/MyApiDemo/blob/master/src/jp/baroqueworksdev/myapidemo/view/SlidePanelView.java
画面イメージ
デフェルトは画面下部にタブだけを表示し、タブを引っ張り上げることでViewを表示します。引っ張り上げると、View内のコンテンツが表示されます。
ソース
以下、Githubにて公開中です。ライセンスはMITライセンスです。
https://github.com/baroqueworksdev/MyApiDemo/blob/master/src/jp/baroqueworksdev/myapidemo/view/SlidePanelView.java
2013年8月1日木曜日
Android 4.3 で追加されたAppOpsの調査 その2
抑制できるパーミッション
以下のソースチェックしましょう。frameworks/base/core/java/android/app/AppOpsManager.java
ソースを確認すると、次のような値が宣言されています。
これらの値を引数にして、モジュールをコールします。
public class AppOpsManager {
:
// when adding one of these:
// - increment _NUM_OP
// - add rows to sOpToSwitch, sOpNames, sOpPerms
// - add descriptive strings to Settings/res/values/arrays.xml
public static final int OP_NONE = -1;
public static final int OP_COARSE_LOCATION = 0;
public static final int OP_FINE_LOCATION = 1;
public static final int OP_GPS = 2;
public static final int OP_VIBRATE = 3;
public static final int OP_READ_CONTACTS = 4;
public static final int OP_WRITE_CONTACTS = 5;
public static final int OP_READ_CALL_LOG = 6;
public static final int OP_WRITE_CALL_LOG = 7;
public static final int OP_READ_CALENDAR = 8;
public static final int OP_WRITE_CALENDAR = 9;
public static final int OP_WIFI_SCAN = 10;
public static final int OP_POST_NOTIFICATION = 11;
public static final int OP_NEIGHBORING_CELLS = 12;
public static final int OP_CALL_PHONE = 13;
public static final int OP_READ_SMS = 14;
public static final int OP_WRITE_SMS = 15;
public static final int OP_RECEIVE_SMS = 16;
public static final int OP_RECEIVE_EMERGECY_SMS = 17;
public static final int OP_RECEIVE_MMS = 18;
public static final int OP_RECEIVE_WAP_PUSH = 19;
public static final int OP_SEND_SMS = 20;
public static final int OP_READ_ICC_SMS = 21;
public static final int OP_WRITE_ICC_SMS = 22;
public static final int OP_WRITE_SETTINGS = 23;
public static final int OP_SYSTEM_ALERT_WINDOW = 24;
public static final int OP_ACCESS_NOTIFICATIONS = 25;
public static final int OP_CAMERA = 26;
public static final int OP_RECORD_AUDIO = 27;
public static final int OP_PLAY_AUDIO = 28;
public static final int OP_READ_CLIPBOARD = 29;
public static final int OP_WRITE_CLIPBOARD = 30;
/** @hide */
public static final int _NUM_OP = 31;
:
}
つまり、次のようなことしか抑制できません。
- 位置情報
- バイブレーション
- 電話帳のR/W
- 電話履歴のR/W
- カレンダーのR/W
- WiFiのスキャン
- ノッティフィケーションのPost
- 電話発信
- SMSのR/W
- SMS/メールの受信
- SMSの送信
- 設定のWrite
- SystemAlertWindowの使用
- ノッティフィケーションの参照
- カメラ
- オーディオの録音/鳴動
- クリップボードのR/W
Internet、Bluetooth、SDカードなど、アプリケーションの再起動が必要そうな機能の抑制できないようです。
(※なぜアプリケーションの再起動が必要なのかは、frameworksのソースを確認しよう)
2013年7月27日土曜日
Android 4.3 で追加されたAppOpsの調査
Android4.3で追加されているAppOpsを確認しました。
アプリケーションのパーミッションの管理ができるかもしれません。
格納ディレクトリは上記のとおり、Systemディレクトリでファイル名はappops.xmlです。
設定値のR/Wは次のように、AppOpsServiceで処理されています。詳しく知りたい方はソースを確認しましょう。
以下のソースは要チェックです。
- AppOpsCategory.java
- AppOpsDetails.java
- AppOpsState.java
- AppOpsSummary.java
frameworks/base/core/java/android/app/AppOpsManager.java
frameworks/base/services/java/com/android/server/AppOpsService.java
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
アプリケーションのパーミッションの管理ができるかもしれません。
ポイント
AppOpsのポイントです。- AppOpsManager、AppOpsServiceが追加された
- アプリケーションで使うには、getSystemService(Context.LAYOUT_INFLATER_SERVICE)をコール
- アプリケーションのパーミッションの抑制ができる
- framewokrs内の各サービスは、AppOpsServiceから設定値を取得して動作ON/OFFを決定
簡易クラス図
AppOpsServiceが生成されるタイミング
ActivityManagerServiceのコンストラクタで、AppOpsServiceが生成されます。
private ActivityManagerService() {
File systemDir = new File(dataDir, "system");
:
mAppOpsService = new AppOpsService(new File(systemDir, "appops.xml"));
:
}
AppOpsManagerの設定データ
AppOpsの設定値は次のように保存されています。格納ディレクトリは上記のとおり、Systemディレクトリでファイル名はappops.xmlです。
設定値のR/Wは次のように、AppOpsServiceで処理されています。詳しく知りたい方はソースを確認しましょう。
public class AppOpsService extends IAppOpsService.Stub {
public AppOpsService(File storagePath) {
mFile = new AtomicFile(storagePath);
mHandler = new Handler();
readState();
}
void readState() {
}
void writeState() {
}
}
ソース
android-4.3_r2.1のソースを確認すると、次のソースがAppOpsに該当します。以下のソースは要チェックです。
Settingsアプリ
packages/apps/Settings/src/com/android/settings/applications- AppOpsCategory.java
- AppOpsDetails.java
- AppOpsState.java
- AppOpsSummary.java
Frameworks
frameworks/base/core/java/android/app/ContextImpl.javaframeworks/base/core/java/android/app/AppOpsManager.java
frameworks/base/services/java/com/android/server/AppOpsService.java
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
『プロの力が身につく Androidプログラミングの教科書』が発売されました
執筆に参加
『プロの力が身につく Androidプログラミングの教科書』は6人のAndroiderによって、書かれています。 私も執筆に参加させていただきました。こんな方へ
Androidをこれからはじめようとする方&脱初心者を望んでいる方に、是非、手に取っていただきたい本です。 本書HPから熱い思いをお伝えします。 引用元:http://android-textbook.com/android-programming-textbook/※ここから引用 本書は、Android のことを「知る」「学ぶ」「考える」「使う」「守る」「試す」ための入門書になります。 Androidのことをより深く知ってもらうための書籍でもあり、Androidアプリケーションの開発をはじめたばかりの方でも、本書を順番に読み進めながら学べる学習スタイルを採用しています。初心者の方だけでなく、Androidアプリケーションを開発された経験がある方でも、Androidのことをより深く知ってもらうための要素を含んでいます。最終的にはオリジナルのアプリケーションを開発し、世の中に公開できるようになることを目標にしています。また本書は、Androidアプリケーションの開発方法のみならず、執筆者の経験から得たノウハウを詰め込んでいますので、すべての開発者が「Android」というものを深く知ることができます。 ※ここまで引用本書の目次が上記HPに公開されています。是非、ご覧ください。
プロの力が身につく Androidプログラミングの教科書
posted with amazlet at 13.07.26
藤田 竜史 要 徳幸 住友 孝郎 日高 正博 小林 慎治 木村 尭海
ソフトバンククリエイティブ
売り上げランキング: 38,541
ソフトバンククリエイティブ
売り上げランキング: 38,541
登録:
投稿 (Atom)






