Suche senden
Hochladen
Androidの表示レイヤーと画面常駐型アプリの話
•
12 gefällt mir
•
21,105 views
K
kirimin
Folgen
Technologie
Melden
Teilen
Melden
Teilen
1 von 14
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Firebase A/B Testingを使ってサーバ側までA/Bテストした話(Android)
Firebase A/B Testingを使ってサーバ側までA/Bテストした話(Android)
gree_tech
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Kongの概要と導入事例
Kongの概要と導入事例
briscola-tokyo
ちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしよう
Yasuharu Nishi
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Yuichi Nakamura
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
Apache Solr 入門
Apache Solr 入門
順平 西本
TOCから俯瞰するリーンスタートアップ
TOCから俯瞰するリーンスタートアップ
Taro Kawai
Empfohlen
Firebase A/B Testingを使ってサーバ側までA/Bテストした話(Android)
Firebase A/B Testingを使ってサーバ側までA/Bテストした話(Android)
gree_tech
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Kongの概要と導入事例
Kongの概要と導入事例
briscola-tokyo
ちょっと明日のテストの話をしよう
ちょっと明日のテストの話をしよう
Yasuharu Nishi
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Keycloak入門-OpenID ConnectによるAPIセキュリティ
Yuichi Nakamura
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
Apache Solr 入門
Apache Solr 入門
順平 西本
TOCから俯瞰するリーンスタートアップ
TOCから俯瞰するリーンスタートアップ
Taro Kawai
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)
Yuji Otani
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
土岐 孝平
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
まべ☆てっく運営
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
NISHIHARA Shota
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
Unity Technologies Japan K.K.
インフラCICDの勘所
インフラCICDの勘所
Toru Makabe
探索的テスト入門
探索的テスト入門
H Iseri
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Yahoo!デベロッパーネットワーク
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi IWANAGA
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
Tatsuo Kudo
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
sairoutine
「なにをどこまでやれば?」OWASP SAMMが導く開発セキュリティ強化戦略
「なにをどこまでやれば?」OWASP SAMMが導く開発セキュリティ強化戦略
Riotaro OKADA
Git Flowを運用するために
Git Flowを運用するために
Shun Tsunoda
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
yoshitaro yoyo
指紋認証と「FIDO」について
指紋認証と「FIDO」について
Device WebAPI Consortium
Marshmallowで変更になったpermission
Marshmallowで変更になったpermission
Pong Hiro
Weitere ähnliche Inhalte
Was ist angesagt?
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)
Yuji Otani
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
土岐 孝平
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
まべ☆てっく運営
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Daichi Koike
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
NISHIHARA Shota
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
Unity Technologies Japan K.K.
インフラCICDの勘所
インフラCICDの勘所
Toru Makabe
探索的テスト入門
探索的テスト入門
H Iseri
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Yahoo!デベロッパーネットワーク
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi IWANAGA
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
Tatsuo Kudo
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
sairoutine
「なにをどこまでやれば?」OWASP SAMMが導く開発セキュリティ強化戦略
「なにをどこまでやれば?」OWASP SAMMが導く開発セキュリティ強化戦略
Riotaro OKADA
Git Flowを運用するために
Git Flowを運用するために
Shun Tsunoda
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
yoshitaro yoyo
Was ist angesagt?
(20)
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)
What's new in Spring Boot 2.6 ?
What's new in Spring Boot 2.6 ?
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
ITコミュニティと情報発信に共通する成長と貢献の要素
ITコミュニティと情報発信に共通する成長と貢献の要素
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
【Unite 2017 Tokyo】「黒騎士と白の魔王」にみるC#で統一したサーバー/クライアント開発と現実的なUniRx使いこなし術
インフラCICDの勘所
インフラCICDの勘所
探索的テスト入門
探索的テスト入門
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Swagger ではない OpenAPI Specification 3.0 による API サーバー開発
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
「なにをどこまでやれば?」OWASP SAMMが導く開発セキュリティ強化戦略
「なにをどこまでやれば?」OWASP SAMMが導く開発セキュリティ強化戦略
Git Flowを運用するために
Git Flowを運用するために
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
Andere mochten auch
指紋認証と「FIDO」について
指紋認証と「FIDO」について
Device WebAPI Consortium
Marshmallowで変更になったpermission
Marshmallowで変更になったpermission
Pong Hiro
20150723 最近の興味動向 fido編
20150723 最近の興味動向 fido編
Tatsuya (達也) Katsuhara (勝原)
プロ生ちゃん常駐化の提案とアプリ開発の裏
プロ生ちゃん常駐化の提案とアプリ開発の裏
pmw1415
OMA GotAPI 標準化作業状況アップデート
OMA GotAPI 標準化作業状況アップデート
Device WebAPI Consortium
MozOpenHardプロジェクトと そのコア技術について
MozOpenHardプロジェクトと そのコア技術について
Takagi Koichi
Intro to OMA GotAPI Open-Source Implementation Supporting Web - Healthcare Us...
Intro to OMA GotAPI Open-Source Implementation Supporting Web - Healthcare Us...
Device WebAPI Consortium
LinkingとデバイスWebAPI
LinkingとデバイスWebAPI
Device WebAPI Consortium
Intro to OMA GotAPI Open-Source Implementation Supporting Web - Healthcare Us...
Intro to OMA GotAPI Open-Source Implementation Supporting Web - Healthcare Us...
Device WebAPI Consortium
DeviceConnect向けCordovaプラグインを作ってみた
DeviceConnect向けCordovaプラグインを作ってみた
Device WebAPI Consortium
201606 DeviceWebAPI 第4回技術WG会合
201606 DeviceWebAPI 第4回技術WG会合
Nagano Kosuke
DWAPI-3DP of OMA and Related Technology
DWAPI-3DP of OMA and Related Technology
tajinet
デバイスWeb apiコンソーシアム 第四回資料(RemoteRelay with Thermal camera)
デバイスWeb apiコンソーシアム 第四回資料(RemoteRelay with Thermal camera)
Iida Keisuke
デバイスWeb apiコンソーシアム lt-bril
デバイスWeb apiコンソーシアム lt-bril
Iida Keisuke
サーマルカメラ OWLIFT GotAPI 連携
サーマルカメラ OWLIFT GotAPI 連携
Device WebAPI Consortium
WebRTCプラグインで広がるWi-Fiカメラのアプリケーション
WebRTCプラグインで広がるWi-Fiカメラのアプリケーション
Device WebAPI Consortium
デバイスWebAPIによるIoTの普及拡大と応用事例
デバイスWebAPIによるIoTの普及拡大と応用事例
Device WebAPI Consortium
GitHubドキュメント整備状況報告とハンズオン
GitHubドキュメント整備状況報告とハンズオン
Device WebAPI Consortium
イベント出展報告
イベント出展報告
Device WebAPI Consortium
メディア統合プラットフォーム - メディア・デバイスによらない"テレビ"視聴と放送関連機能のIoT対応
メディア統合プラットフォーム - メディア・デバイスによらない"テレビ"視聴と放送関連機能のIoT対応
Device WebAPI Consortium
Andere mochten auch
(20)
指紋認証と「FIDO」について
指紋認証と「FIDO」について
Marshmallowで変更になったpermission
Marshmallowで変更になったpermission
20150723 最近の興味動向 fido編
20150723 最近の興味動向 fido編
プロ生ちゃん常駐化の提案とアプリ開発の裏
プロ生ちゃん常駐化の提案とアプリ開発の裏
OMA GotAPI 標準化作業状況アップデート
OMA GotAPI 標準化作業状況アップデート
MozOpenHardプロジェクトと そのコア技術について
MozOpenHardプロジェクトと そのコア技術について
Intro to OMA GotAPI Open-Source Implementation Supporting Web - Healthcare Us...
Intro to OMA GotAPI Open-Source Implementation Supporting Web - Healthcare Us...
LinkingとデバイスWebAPI
LinkingとデバイスWebAPI
Intro to OMA GotAPI Open-Source Implementation Supporting Web - Healthcare Us...
Intro to OMA GotAPI Open-Source Implementation Supporting Web - Healthcare Us...
DeviceConnect向けCordovaプラグインを作ってみた
DeviceConnect向けCordovaプラグインを作ってみた
201606 DeviceWebAPI 第4回技術WG会合
201606 DeviceWebAPI 第4回技術WG会合
DWAPI-3DP of OMA and Related Technology
DWAPI-3DP of OMA and Related Technology
デバイスWeb apiコンソーシアム 第四回資料(RemoteRelay with Thermal camera)
デバイスWeb apiコンソーシアム 第四回資料(RemoteRelay with Thermal camera)
デバイスWeb apiコンソーシアム lt-bril
デバイスWeb apiコンソーシアム lt-bril
サーマルカメラ OWLIFT GotAPI 連携
サーマルカメラ OWLIFT GotAPI 連携
WebRTCプラグインで広がるWi-Fiカメラのアプリケーション
WebRTCプラグインで広がるWi-Fiカメラのアプリケーション
デバイスWebAPIによるIoTの普及拡大と応用事例
デバイスWebAPIによるIoTの普及拡大と応用事例
GitHubドキュメント整備状況報告とハンズオン
GitHubドキュメント整備状況報告とハンズオン
イベント出展報告
イベント出展報告
メディア統合プラットフォーム - メディア・デバイスによらない"テレビ"視聴と放送関連機能のIoT対応
メディア統合プラットフォーム - メディア・デバイスによらない"テレビ"視聴と放送関連機能のIoT対応
Androidの表示レイヤーと画面常駐型アプリの話
1.
Androidの表示レイヤーと画面常駐型アプリの話
2.
今回の話 表示レイヤーとは? 任意のレイヤーにViewを表示させる Viewの挙動を設定する 実装時の注意点
3.
表示レイヤーとは? Androidの画面は複数の表示レイヤーによって構成されている。 通常のアプリを表示するレイヤーの他にトースト表示用のレイヤーや着 信画面用のレイヤーなどがある。 レイヤーによって表示順やフォーカスが当てられるかなど挙動が決まっ ている。 通知バーやロック画面より上に表示されるレイヤーもある。 アプリから任意のレイヤーにViewを置く事も出来る。
4.
主なレイヤーの種類 (WindowManager.LayoutParamsの定数参照) TYPE_APPLICATION(アプリが通常表示されるレイヤー) TYPE_PHONE(着信画面のレイヤー) TYPE_TOAST(トーストを表示するレイヤー。タッチイベントを拾えない?) TYPE_SYSTEM_ALERT(バッテリー不足時の警告などに使用されているレイヤー) TYPE_SYSTEM_OVERLAY(画面の一番上に表示されるレイヤー。ロック画面にも 干渉するためフォーカスを取得出来ない) 下に書いたものほど上位のレイヤーです。 ただしレイヤーの順序は明確には決まっていないのか機種やバージョンに異なる場合があるようなので注意。 ※手持ちのGalaxyS3とエミュレータでも挙動が違った・・・。(バグ?)
5.
任意のレイヤーにViewを表示させる 任意のレイヤーにViewを追加するにはWindowManagerクラスの addView(View view, LayoutParams
params)を呼ぶ。 addViewを呼ぶと画面に新しいViewを追加する事が出来る。 viewと一緒に渡すWindowManager.LayoutParamsのコンストラクタ引 数で表示レイヤーを指定出来る。 ServiceからViewを追加する事で、アプリがバックグラウンドにいる時 でも常に画面にViewを表示させ、Serviceから操作出来るようにする。 Viewを消す時はremoveView(View view)を呼ぶ。
6.
WindowManager.LayoutParams WindowManager.LayoutParamsの引数は (int w, int
h, int _type, int _flags, int _format) _typeで指定した値によってViewの表示レイヤーを指定する事が出来る。 _flagsで指定した値によってViewをタッチ出来るかなどの挙動を指定する 事が出来る。
7.
実装例 mWindowManager = (WindowManager)
getSystemService(Context.WINDOW_SERVICE); LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.window, null); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT); mWindowManager.addView(view, params); ※ServiceのonStartとかで
8.
実装例 mWindowManager = (WindowManager)
getSystemService(Context.WINDOW_SERVICE); LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.window, null); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, PixelFormat.TRANSLUCENT); mWindowManager.addView(view, params); このへんがポイント レイヤーはTYPE_TOASTかTYPE_SYSTEM_ALERT辺りを使うのが無難?
9.
動作例 <?xml version="1.0" encoding="utf-8"?> <LinearLayout -省略-
> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="はろーうぃんどう" android:padding="16dp" android:textColor="#000000" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="閉じる" android:textColor="#000000" /> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="EditText" > </EditText> </LinearLayout>
10.
Viewの挙動を設定する ViewにButtonなどを置きリスナーを登録すれば普通のActivityのように 様々な動作を行える。 ただしイベントを拾えるかはレイヤーの種類と_flagで設定した値による。 先の実装例ではTYPE_SYSTEM_ALERTだが、FLAG_NOT_TOUCHABLE を設定しているため、Viewはイベントを拾わずタッチは後ろのレイヤーに すり抜ける。 →画面にマスクをかけるようなアプリを作れる。
11.
主なFLAGの種類 (WindowManager.LayoutParamsの定数参照) FLAG_NOT_TOUCHABLE(Viewはイベントを拾うことが出来ない) FLAG_NOT_FOCUSABLE(Viewはキー入力イベントのフォーカスを得る事が出来 ない。タッチは拾える) FLAG_KEEP_SCREEN_ON(Viewがある限り画面のバックライトを維持する) 他にもいろいろあるけど説明がややこしくてよく分からなかったので割愛しま した!!
12.
キーイベントのフォーカスについて TYPE_SYSTEM_ALERTなどでは特にFLAGを指定しなければEditTextなど でキーイベントのフォーカスを得る(ソフトキーボードを出す)事が出来ま す。 ただしViewにフォーカスが付いている状態ではタッチイベントを背後のレ イヤーを触れなくなるため、Viewをウィンドウ表示させてる意味が無く なってしまいます。 そこで私の作ったアプリでは通常時はFLAG_NOT_FOCUSABLEを設定し たLayoutParamsを使い、EditTextを触った時のみLayoutParamsを入れ 替えるという処理を行っています。(もっと良い方法あるのかな?)
13.
実装例 @Override public boolean onTouch(View
v, MotionEvent event) { if (v.getId() == mView.getId()) { mWindowManager.updateViewLayout(mView, mNotFocusableParams); } else if (v.getId() == R.id.editText1) { mWindowManager.updateViewLayout(mView, mFocusableParams); } return false; }
14.
実装時の注意点 レイヤーを利用したアプリにはSYSTEM_ALERT_WINDOWのパーミッ ションが必要。 ちゃんとViewを消すような処理を書かないと、設定からアプリを強制終了 するまでViewを消せなくなってしまう可能性がある。 下手な実装をすると端末を何も操作出来ないような状態にも出来てしま う。特に通知バーやロック画面より上にViewを表示させるような場合は細 心の注意が必要。 実装の際はドキュメントをよく読み、多くのバージョンや端末でテストし 問題が起こらないかを確認しましょう。
Jetzt herunterladen