Android4.2 まとめてみた

チームEGG
曽川 義英
小原 宗一郎
チームEGG
   EGG
   EGGの紹介

              チームEGG
            個人開発コラボ集団




    よるにゃん     待ち受けトラッパー

       1月中にテレビ紹介があります
     (※詳細は大人の都合で禁則事項)
よるにゃん
待ち受けトラッパー
ブログ紹介




        EGG 開発ブログ
        http://eggdev.blogspot.jp/
はじめに
新機能の使い方よりも、
前バージョンとの影響がメインになってるかも…
Android4.2のハイライト
コードネーム

コードネーム:Jelly Bean
        JELLY_BEAN_MR1
4.2のコードネームは4.1と同じ“Jelly Bean"だから
マイナーバージョンアップと思われがち。
実際はおもしろい機能がたくさん追加されている。
4.2
  4.2の端末

Android4.2はGalaxyNexusやNexus7等で利用可能。
 使ってみたい人はGooglePlayStoreで購入しよう。
マルチユーザ機能

タブレット端末では、ロック画面からユーザを切り替
えることができる。
家族で一緒に使うもよし、ビジネスに使うもよし。
Lockscreen Widgets
ロック画面にウィジェットを表示できるようになった。
これからは、ロックを解除しなくてもスケジュールや
メールを確認できる。
MiraCast

無線LANを利用して、Androidからディスプレイへ
映像を共有することができる。
Daydream

端末がアイドル時や充電時にスクリーンセーバー
を表示する。フォトフレームのように写真を表示し
たり、最新のニュースやブログを表示できる。
通知パネルから直接アクション

画面左上をスワイプすれば通知バーの操作、画面
右上をスワイプすればオプション設定を操作できる。
国産スマホでは独自に対応されていたが、OS標準
で対応されることになった。
Android4.2は何が変わったの?
開発者オプションはどこへ行った?




              ビルド番号を7回タップ
開発者オプションはどこへ行った?




              応援してくれます!
開発者オプションはどこへ行った?




              なりました!
開発者オプションはどこへ行った?




              でました!
開発者オプションはどこへ行った?
ContentProvider
・デフォルトで非公開設定
 勝手にアクセスされたら怖いよね。
 (targetSdkVersion,minSdkVersionが17以上)


           <provider ...
                      android:exported="false"/>
マルチユーザって何?
他のユーザからファイルは見える?
じゃあファイルのディレクトリ違うの?
             管理者                                   ユーザ                                    ユーザ




内部ストレージ
 /data/data/com.example.test/files         user/10
                                     /data/user/10
                                           user/10/com.example.test/files         user/11
                                                                            /data/user/11
                                                                                  user/11/com.example.test/files


外部ストレージ
                         0
       /storage/emulated/0                                    10
                                            /storage/emulated/10                                        11
                                                                                      /storage/emulated/11
ハードコーディングしていませんか?

          String saveDir = "data/data/パッケージ名/files";
                                ・・・




内部ストレージ
      getFilesDir() getCacheDir() openFileOutput()
      getFilesDir()、getCacheDir()
                    getCacheDir()、openFileOutput()

外部ストレージ
    getExternalFilesDir() getExternalStoragePublicDirectory()
    getExternalFilesDir()、getExternalStoragePublicDirectory()
端末情報を使ってませんか?
                                        AndroidID
                                        IMEI
                                        Macアドレス
                                        ・・・




                                            例)アドレス帳・Web履歴


「サーバに保存してるデータください。」                          「サーバに保存してるデータください。」
                      「サーバに保存してるデータください。」
端末情報は怖いので
1.アプリでUUIDを生成する
参考:AndroidDevelopersBlog 2011年3月30日

2.GoogleCloudMessagingのRegistrationIDを使
  う

3.サーバからIDを発行する
新しいけど新しくないSettings.Global
          Settings.Global



                    Wifi、開発者オプションなど
  Settings.Secure                                   REA
                                                        D
                                                    ONL
                                                       Y

                                      Settings.Global



  Settings.System


                       機内モードなど
Settings.Global put
   Settings.Globalのput
                   putを叩いてみた
  そもそもLintエラーになる
    android.permission.
                                           SecurityException
WRITE_SECURE_SETTINGS


                                直接変更




                          アプリ             設定             ユーザ操作


                                Intent



                                         設定画面
Fragment   Fragment
Fragmentの中のFragment
Fragment内部に動的にFragmentを入れられる
 getChildFragmentmanagerで実現
 例)ViewPager内でFragmentの切り替え


   Fragment videoFragment = new VideoPlayerFragment();FragmentTransaction
   transaction = getChildFragmentManager().beginTransaction();
   transaction.add(R.id.video_fragment, videoFragment).commit();
「さようなら世界」
~4.2からの非推奨API~
非推奨API
   API
   APIとは?


  前のバージョンの                          新しいバージョンの
Androidフレームワーク                     Androidフレームワーク




                                      非推奨API
                                     @deprecated
                  もうメンテナンスしないよ~
                 ちゃんと動かなくても許してね!
過去の非推奨の一例
・Activity#showDialog(API13~)
 →DialogFragment



・Gallery(API16~)
 →HorizontalScrollView
 →ViewPager
古きAndoird
   Andoird    SlidingDrawer
   Andoirdを支えたSlidingDrawer
→ アプリ内で独自に実装する
  Android Open Source Projectのコードを使用
後継者に任せたDigitalClock
       DigitalClock
→ TextClock
  カスタマイズしやすくなった
悪名高きMODE_WORLD_XXX
     MODE_WORLD_XXX
Context.MODE_WORLD_WRITABLE
Context.MODE_WORLD_READABLE
                                ContentProvider
                                BroadcastReceiver
                                Service



               直接読み書き可能



        他アプリ    データ書き換え
                           自分のアプリ
                電話帳取得・・・
DateUtils
DateUtilsの一部
月名・曜日名・AM/PMの取得など
→SimpleDateFormat
電池が気になるWakeLock
         WakeLock
         WakeLock周り
SCREEN_DIM_WAKE_LOCK
FULL_WAKE_LOCK
                                                   FLAG_KEEP_SCREEN_ON

フラグ名                      CPU   画面       キーボー
                                                             パーミッション不要
                                         ド

PARTIAL_WAKE_LOCK         ON     Off       Off


SCREEN_DIM_WAKE_LOCK      ON     Dim       Off


SCREEN_BRIGHT_WAKE_LOCK   ON    Bright     Off


FULL_WAKE_LOCK            ON    Bright    Bright
本文と詳細セットのTwoLineListItem
          TwoLineListItem
→簡単に作れる
  RelativeLayout、LinearLayoutで自作する
開発ツールはどうなったの?
View
View階層をボタンで見れる
UI Automator Testに使えるプロパティを出す
APILevel16からサポート
便利になったGraphicalLayout
      GraphicalLayout
他言語のstring.xmlを漏れなく作れる
便利になったGraphicalLayout
      GraphicalLayout
他言語でのレイアウトが見れる!
XML
XMLコード補完をさらに改良
テーマに紐づいたリソースをサジェストできる
「?」からはじまるやつ
アプリのテンプレートが増えた
・フルスクリーン(フォトビューア系)
・ログイン入力画面
・設定画面
support-v4は変わったの?
AtomicFile
ファイル操作の失敗時にロールバックできる



                       コピー




        元ファイル                     バックアップファイル
       (書き換える)


                 new AtomicFile(xxx)
AtomicFile
ファイル操作の失敗時にロールバックできる
             失敗時




                         バックアップファイル



             failWrite
AtomicFile
ファイル操作の失敗時にロールバックできる
                 成功時




        元ファイル
       (書き換える)


                 finishWrite
FragmentManager
FragmentManagerのログが出せる!
API Level11で既にあったんですけどね。
デモやります
DigitalClock  TextClock
DigitalClockからTextClock
Presentation
DreamService(DayDream)
One more thing...
GoogleMapAPI v2
GoogleMapAPIがv2
             v2に
Fragmentで書ける
レイアウトで色々設定できる
Billingがバージョン3に
In-app Billing      3
非同期じゃなくなった!
onActivityResultで処理できる!
GooglePlayが課金を管理してくれる!
 ヒカリエ・ラボラトリー(研究所)を略して「ヒカ☆ラボ」
 レバレジーズが運営するイベントの総称。
 ヒカリエから技術や知識の追求、発信をしていくということで
 こちらの名前を使ってます。
とは

■本イベントの運営・サポートをしております。

■レバレジーズ株式会社

■設立:2005年4月 資本金:5000万円 従業員数:約220名

■主な事業内容:システムエンジニアリング事業

■フリーランス(個人事業主)の方と企業様とのマッチング
  をしております。

■BtoC WEBサービス開発案件などを主に取り扱っております。

Android4.2徹底解剖!