Android 10 対応 Tips

Android 10 対応 Tips

Android 10(target sdk version 29)に対応したときに考慮したことをご紹介します

Ac6f0faaab626a101cab97cab29f086f?s=128

katsuki-nakatani

February 16, 2020
Tweet

Transcript

  1. Android 10 対応 Tips GDGミートアップ in 京都 #2

  2. Speaker 中谷 克紀(Katsuki Nakatani) Works  Enterprise Server Engineer GDG 神戸スタッフ( GDG

    kobe staff) Twitter  @KatsukiNakatani my hobby
  3. Android 10 2019/9 release  Pixelシリーズを皮切りに、 EssentialPhoneなどにも順次リリース SDK Version 29

  4. changes in Android 10 ・Gesture Navigation ・Dark Theme ・Location Permisison(use

    foreground only or full supported) ・External Storage Security ・Supported Foldable device ・Role
  5. さて、今日の本題 Androidアプリを 10に対応するのに必要なこと この電話アプリを更新したときに対応したことのことを お話しようと思います

  6. my app implemented ・Gesture Navigation ・Dark Theme ・GPS権限の細分化(アプリ使用中のみ・バックグラウンドでも利用可能など) ・外部ストレージのセキュリティ強化 ・フォルダブルデバイスのサポート

    ・RoleManager
  7. Gesture Navigation Android10での大きな変更点で、 「戻る」の動作が、画面端からのスワイプに割り当てられている 一番影響が大きいと感じたのが NavigationDrawer

  8. Gesture Navigation ・対策1・・・Twitterのようにセーフエリアを決めて        動作するエリアを制限する Gestureに反応しないエリア

  9. Gesture Navigation ・対策2・・・Navigation Drawerをやめる

  10. Gesture Navigation 個人的に、「どうしてもNavigationDrawerが必要」で無いのであれば NavigationDrawerは使わないほうが無難 ※結局セーフエリアを作ってもユーザーの感覚で期待したエリアで期待した動作を しない場合はフラストレーションが溜まる

  11. Dark Theme ・Android 9    ナビゲーションバーやQuickPanelなどの一部のみ変更される ・Android 10   システム画面や、各アプリなど全体的に変更される

  12. What are you happy about? ・Battery friendly ・目に優しい、疲れにくい 実装してみましょう

  13. EASY

  14. Whats 「DayNight」? https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/theme/res values-night/themes_daynight.xml <style name="Theme.MaterialComponents.DayNight" parent="Theme.MaterialComponents"/> <style name="Theme.MaterialComponents.DayNight.DarkActionBar" parent="Theme.MaterialComponents"/>

    <style name="Theme.MaterialComponents.DayNight.NoActionBar" parent="Theme.MaterialComponents.NoActionBar"/> <style name="Theme.MaterialComponents.DayNight.DialogWhenLarge" parent="Theme.MaterialComponents.DialogWhenLarge"/> values/themes_daynight.xml <style name="Theme.MaterialComponents.DayNight" parent="Theme.MaterialComponents.Light"/> <style name="Theme.MaterialComponents.DayNight.DarkActionBar" parent="Theme.MaterialComponents.Light.DarkActionBar"/> <style name="Theme.MaterialComponents.DayNight.NoActionBar" parent="Theme.MaterialComponents.Light.NoActionBar"/> <style name="Theme.MaterialComponents.DayNight.DialogWhenLarge" parent="Theme.MaterialComponents.Light.DialogWhenLarge"/>
  15. Dark Theme ・DarkモードとLightモードでリソースを変更する 同じようにvalue-nightディレクトリを利用する

  16. Sample

  17. Dark Theme ・ダークテーマを実装するには、 DayNightテーマと-nightディレクトリを活用する ユーザーレビューを見る限り、ダークテーマへの対応は 結構好感度が高い気がするので、ぜひ実装を

  18. Role Manager Android 9 まではデフォルトアプリと呼ばれていたもの (10でも画面は変わらず )

  19. Role Manager デフォルトアプリって何がうれしい? ・本来触れない特権系のパーミッションへアクセスができる ・ダイヤラ―だと、

  20. Role Manager 自分がその機能のデフォルトに設定されているかどうか (getSystemService(Context.TELECOM_SERVICE) as TelecomManager).let { TextUtils.equals(it.defaultDialerPackage, packageName) }

    (getSystemService(Context.ROLE_SERVICE) as RoleManager).let { it.isRoleAvailable(RoleManager.ROLE_DIALER) && it.isRoleHeld(RoleManager.ROLE_DIALER) } Android 6.0 〜 Android9.0 Android 10
  21. Role Manager 自分がその機能をデフォルトにセットしたい (Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER).apply { putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, packageName) } (getSystemService(Context.ROLE_SERVICE) as

    RoleManager).createRequestRoleIntent(RoleManager.ROLE_DIALER) Android6.0 〜 Android 9 Android 10
  22. Role Manager Android 10 未満 Android 10

  23. Role Manager Android 10からはデフォルトアプリの扱いが「 Role」になっているので、実装している人は RoleManagerに変更しよう SDKバージョンを上げた状態で、旧来の「 ACTION_CHANGE_DEFAULT_DIALER」Intentを呼び出 しても何も発生しないので、リリース前には絶対にチェックしよう!

  24. Role Manager

  25. Role Manager Compat

  26. まとめ 今回は、Android 10対応に際して行った幾つかの対応について紹介をしました TargetSDKを上げ続けないと、ストアでの掲載が難しくなる昨今なので、少しずつ対 応しましょう。

  27. ご清聴ありがとうございました GDG神戸のDoorKeeperにもぜひご登録ください https://gdgkobe.doorkeeper.jp/