Simulate Secondary Displays – Android 4.2


20130806secondary_display_blue

Android 4.2 から External display がサポートされました。
それに伴い、開発者向けオプションに Simulate Secondary Displays が追加されました。
1つまたは2つのの外部ディスプレイをオーバレイ表示にてシミュレートします。設定でディスプレイのサイズと解像度を変更することができます。
なお、日本語訳の「2次画面シミュレート」は、意味が分かり難いですね。

New built-in developer options – Jelly Bean | 日本語訳

Nexus10 で試してみました。
(1) 設定 -> 開発者向けオプション -> 2次画面シミュレート
(2) 設定すると、小さい画面がオーバレイ表示されます。
元の画面のミラーリングです。
(3) BasicMediaRouter を起動します。
Change Color にタッチすると、小さい画面の背景色が変わります。
20130806secondary_display_setting20130806secondary_display_set
20130806secondary_display_blue20130806secondary_display_red

GalaxyNexus で試してみました。
(1) ミラーリングが出来ますが。
(2) 外部ディスプレイにはなりません。
Nexus10 と異なり、HDMI端子がないためかも。


BasicMediaRouter – Android 4.2


20130805media_router_blue

Android 4.2 から External display がサポートされました。
アプリから DisplayManager を通して、外部のディスプレイと通信できます。サイズ、解像度、ディスプレイ名などの機能パラメータを取得することができます。
従来から、HDMI 端子があるものは、Android 端末と同じ画面をディスプレイに表示するミラーリングが出来ました。
今回から、Android 端末と違う画面を出すセカンドディスプレイがサポートされました。
また、Wifi で接続する Miracast にも対応しています。

External display support | 日本語訳

サンプルコード

Android 4.3 の SDK にサンプルコード BasicMediaRouter が入っています。
なぜか AOSP (Android Open Source Project) では見つからなかった。
//samples/android-18/media/BasicMediaRouter

試してみました。
(1) Android 端末を HDMI のディスプレイに接続します。
(2) 接続できると、Connected to HDMI が表示されます。
(3) Android の Change Color にタッチすると、ディスプレイの背景色が変わります。
20130805media_router_main20130805media_router_hdmi
20130805media_router_blue20130805media_router_red

サンプルコードの説明

(1) MainActivity.java
メインの Activity です。
API 17 から追加された MediaRouter を使っています。

(2) SamplePresentation.java
セカンドディスプレイに表示します。
API 17 から追加された Presentation を使っています。

関連
Android 4.3 のサンプルコード


BasicContactables – Android 4.3


20130731basic_contactables_name

Android 4.3 にて Contacts Provider が強化された。
Contacts Provider の新しい問合せ先として Contactables.CONTENT_URI が追加された。
氏名や電話番号やメールアドレスなどを含めて、連絡帳を効率的に検索します。

補足
従来は、氏名、電話番号、メールアドレスを同時に検索することが出来なかった。
問合せ先が、氏名、電話番号、メールアドレスで異なっていた。
それぞれ、Contacts.CONTENT_URIPhone.CONTENT_URIEmail.CONTENT_URI

サンプルコード
SDKにサンプルコードが同封されています。
なぜか AOSP(Android Open Source Project) では見つからなかった。
/<sdk>/samples/android-18/content/contacts/BasicContactables

試してみました
(1) 連絡帳に適当に登録する
20130731basic_contactables_list

(2) アプリから検索すると、該当する項目が表示される。
20130731basic_contactables_name20130731basic_contactables_email20130731basic_contactables_phone

サンプルコードの簡単な説明
2つのソースがあります。
(1) MainActivity.java
メインの Activity です。
(2) ContactablesLoaderCallbacks.java
連絡帳を検索する Loader です。

関連
Android 4.3 のサンプルコード
ContactManager
 従来の ContactsContract API を使って、連絡帳に問い合わせするサンプルコード


AppRestrictions – Android 4.3


20130730app_restrictions_setting

Android 4.2 から、1台の端末を複数の人で共有する マルチユーザ がサポートされています。
Android 4.3 から User Restriction がサポートされました。
ユーザ毎に利用できるアプリやコンテンツを制限する、いわゆるペアレントコントロールです。

SDKにサンプルコードが同封されています。
なぜか AOSP(Android Open Source Project) では見つからなかった。
/<sdk>/samples/android-18/legacy/AppRestrictions/

試してみました
User と Restricted Profile の違いが分からず、少し操作に迷いました。
当初は User に制限を掛けるものと思っていました。
しかし、User には制限はかかりません。
Restricted Profile という属性を使用します。
Profile という名前ですが、制限付きの特別なユーザという位置づけです。

(1) マルチユーザ環境 を設定します。
20130630multi_user_login

(2) User Restriction を設定します。
ロック画面から、Owner でログインします。
Settings -> Users を開きます。
Restricted Profile の作成を選びます。
ロック画面の解除方法を設定しろと言われます。
20130730app_restrictions_unlock

(3) ロック画面になります。
上記で設定した解除方法でログインします。
Settings -> Users を開きます。
20130730app_restrictions_users

(4) New Profile を設定します。
App Restrictions Demo を選択します。
このデモでは、3つの設定項目があります。
– Test boolean type
– Test choice type
– Test multi-select type
20130730app_restrictions_setting

(5) ロック画面にします。
Restricted profile でログインします。
App Restrictions Demo を開く。
設定画面で設定した3つ項目の値が表示されます。
このデモでは、表示されるだけで、特に何もしない。
なお、Owner や 一般ユーザのときは、N/A が表示されます。
20130730app_restrictions_app

注意
Restricted profile の設定ボタンを押すとヌルポで落ちます。
NullPointerException at com.android.settings.users.CircleFramedDrawable
20130730app_restrictions_error

サンプルコードの簡単な説明
Android 4.3 から追加された RestrictionEntry を使っています。

4つのソースがあります。
(1) MainActivity.java
制限の対象となるアプリです。
(2) GetRestrictionsReceiver.java
設定画面から呼び出されるレシーバーです。
制限の内容を設定します。
(3) CustomRestrictionsActivity.java
設定のカスタム画面が必要なときに、上記の Receiver から呼び出されます。
下記の Fragment を呼んでいます。
(4) CustomRestrictionsFragment.java
制限の内容を設定します。

動画による解説
DevBytes: Restricted Profiles in Android 4.3
YouTube Preview Image

関連
Android 4.3 のサンプルコード


BluetoothLeGatt – Android 4.3


20130729bluetooth

Android 4.3 から Bluetooth 4.0 がサポートされました。

サンプルコードが公開されています。
BluetoothLeGatt.java

試してみました。
残念ながら BLE is not supported で終了します。
エミュレータでは Bluetooth がサポートされれていなので、仕方ないですね。

サンプルコードの簡単な説明

Android 4.3 から追加された BluetoothGatt を使っています。
Gatt とは、Generic Attribute Profile らしい。
Bluetooth 3.0 までを Classic プロトコル、4.0 を Gatt プロトコル と称するようです。

4つのファイルがあります。
(1) BluetoothLeService.java (サービス)
(2) DeviceControlActivity.java (メイン)
(3) DeviceScanActivity.java (デバイス一覧)
(4) SampleGattAttributes.java (属性)

BluetoothChatと同じような構成です。
– BluetoothChat.java (メイン)
– BluetoothChatService.java (サービス)
– DeviceListActivity.java (デバイス一覧)

動画による解説
DevBytes: Bluetooth Low Energy API in Android 4.3
YouTube Preview Image

関連
Android 4.3 のサンプルコード

参考
Bluetooth – wikipedia
GENERIC ATTRIBUTE PROFILE (GATT) – bluetooth.org
Bluetooth Low Energy – android developers


Android 4.3 のサンプルコード


SDK にはサンプルコードが入っています。
Android 4.3 から構成が大きく変わりました。
従来の Eclipse 用から Android Studio 用に変わりました。
従来の Eclipse 用のものは、legacy というディレクトリに移動しました。

今回、22個ほど追加されています。
Android 4.3 (API 18) 用は、3個です。

connectivity
(1) BasicNetworkDemo – API 8
(2) BasicSyncAdapter – API 7
(3) NetworkConnect – API 8

content
★ (4) BasicContactables – API 18

input
(5) BasicGestureDetect – API 8
(6) BasicMultitouch – API 8

media
(7) BasicMediaRouter – API 17

security
(8) BasicAndroidKeyStore – API 8

testing
(9) ActivityInstrumentationSample – API 7

ui
(10) BasicAccessibility – API 11
(11) ActionBar DoneBar – API 14
(12) ActionBarCompat Basic – API 7
(13) ActionBarCompat Styled – API 7
(14) ActionBarCompat ListPopupMenu – API 7
(15) ActionBarCompat ShareActionProvider – API 7
(16) BorderlessButtons – API 14
(17) CustomChoiceList – API 3
(18) BasicNotifications – API 8
(19) HorizontalPaging – API 11
(20) TextSwitcher – API 4

legacy
★ (21) AppRestrictions – API 18
★ (22) BluetoothLeGatt – API 18
– AccelerometerPlay – API 5
ActionBarCompat – API 14
AndroidBeamDemo – API 14
– ApiDemos – API 4
AppNavigation – API 14
– BackupRestore – API 8
– BluetoothChat – API 6
– BluetoothHDP – API 14
ContactManager – API 5
– CrossCompatibility – API 3
– CubeLiveWallpaper – API 7
HelloEffects – API 14
– HoneycombGallery – API 11
– JetBoy – API 3
KeyChainDemo – API 14
– MultiResolution – API 3
– NotePad – API 11
– RandomMusicPlayer – API 7
– SampleSyncAdapter – API 8
– SearchableDictionary – API 7
– SipDemo – API 9
– Snake – API 3
– Spinner – API 3
– SpinnerTest – API 3
– TicTacToeMain – API 8
ToyVpn – API 14
TtsEngine – API 14
– VoiceRecognitionService – API 8
VoicemailProviderDemo – API 14
– WeatherListWidget – API 11
WiFiDirectDemo – API 14
WiFiDirectServiceDiscovery – API 16
– Wiktionary – API 3
– WiktionarySimple – API 3
– XmlAdapters – API 8
– NotePadtests – API 10
– RenderScript HelloCompute – API 14
– SpellChecker HelloSpellChecker – API 14
– SpellChecker SampleSpellCheckerService – API 14
– USB AdbTest – API 12
– USB MissileLauncher – API 12

参考
Android サンプルコード – ソフトウェア技術ドキュメントを勝手に翻訳


Android 4.3 の SDK に更新した


20130727sdk18

Android 4.3 ( API Level 18 ) が公開されました。
Eclipse を起動して、ウィンドウ -> Android SDK Manager を開きます。
Android 4.3 が表示されので、インストールします。

ヘルプ -> 更新の確認 をします。
ADT 22.0.4 がインストールされます。

念のためキャッシュをクリアします。
eclipse -clean

エミュレータに Nexus 10 が追加されましたが。
私の環境では、うまく起動できませんでした。
起動の途中でエラーになっているようです。

20130727avd_nexus1020130727avd_nexus10_logcat


Android 4.3 発表


20130725android43

Android 4.3 が発表されました。
コードネームは「Jelly Bean」のままということで、大幅な機能追加はなく、性能改善がメインという感じです。

技術的な注目点は、3つくらいですね。

(1) Bluetooth 4.0
BLE (Bluetooth Low Energy) と Bluetooth Smart Ready に対応した。
これで iPhone 向けの BLE ガジェットが Android でも使えるようになりますね。
Bluetooth AVRCP 1.3 にも対応した。曲名などのメタ情報が取得できるようです。

(2) OpenGL ES 3.0
GLSL ES シェーディング言語が新版になった。
ETC2/EAC テクスチャ圧縮が標準機能として提供された。
ビジュアル効果やテクスチャレンダリングが向上した。

(3) Restricted Profiles
ペアレンタルコントロールが追加された。

参考
Android 4.3、まずはNexus 4、7、10に今日から“ローリングアウト”
Android 4.3 “Jelly Bean”発表、Bluetooth SmartやOpenGL ES 3.0に対応


BeagleBone Black で Android を動かす


20130706beagle_bone_android_home

BeagleBone Black は Android をサポートしています。
今回は TI で提供している Pre-built Image を使用しました。
Android Development Kit for Sitara Microprocessors – TI

Android OS の開発母艦は Linux (Ubuntu) が標準となっています。
今回は MAC Book Pro を使用したので、ちょっと工夫が必要でした。

MACでの作業
(1) MAC に Ubuntu をインストールする。
(2) Ubuntu を起動します。
(3) MAC にSDカードを 差します。
(4) SDカードのデバイス名を確認します。

df -h

(5) Pre-built Image をダウンロードします。
(6) 解凍します。
(7) SDカードにブートイメージを書き込みます。

./mkmmc-android.sh <SDカード>

BeagleBone Black での作業
(1) BeagleBone にSDカードを 差します。
(2) USBキーボード、USBマウス、HDMIディスプレイをつないで、5V電源アダプタを差します。
(3) しばらくすると、Android が立ち上がります。
20130706beagle_bone_android_home20130706beagle_bone_android_about

Android のシャットダウン
(1) MAC のUSB端子と、BeagleBone のミニUSB端子を、USBケーブルで接続します。
(2) MAC から ADB で シャットダウンのコマンドを送ります。

adb shell reboot -p

補足
END ボタンで シャットダウンするという情報もあるが、私の環境ではうまくいかなかった。

参考
BeagleBoard-xM に Android Gingerbread をポーティング
BeagleBoard-xM RevCにGingerbreadをのせる

YouTube Preview Image

UserManager – Android 4.2


20130603muti_user

Android 4.2 から、マルチユーザ用のライブラリとして、UserManagerUserHandle が追加されました。
これで取得できる情報は、SerialNumber だけです。
これは、owner が 0 (ゼロ)で、ユーザを増やす毎に、10, 20, 30 という番号が付与されます。

UserHandle handle = Process.myUserHandle();     
UserManager manager = (UserManager) getSystemService( USER_SERVICE );
int number = manager.getSerialNumberForUser( handle );

SerialNumber は、ローカル領域の識別などに使われます。
シングルユーザ・モードのとき
 /data/data/<プロジェクト名>/
マルチユーザ・モードのとき
 /data/user//<プロジェクト名>/
20130630multi_user_dir_single
20130630multi_user_dir_multi

なお、UserManagerのソース を見ると、getUsers という隠しメソッドが用意されています。
ユーザの一覧が取得できるようです。