Nexus 7 の 解体写真


20120728nexus7

2012年6月の Google I/O 2012 にて、Nexus 7 が発表されました。
Asus の MeMO ME370T がベースになっています。
液晶は、7インチ 1280×800 です。
CPUは、NVIDIA Tegra 3 クアッドコア です。
Android 4.1 (Jelly Bean) が搭載されます。

iFixit により、解体されてます。
Nexus 7 Teardown

参考
Google I/O 2012開催–「Android 4.1」「Nexus 7」「Nexus Q」など発表


EasyTeather を削除する


EasyTeather は、ADB を使っているので、実機デバックが出来ません。
不要になったときは、専用のドライバーを削除します。

# rm -f -R /System/Library/Extensions/EasyTetherUSBEthernet.kext

参考
MacにEasyTeatherドライバを導入しているとddmsで認識しない問題を解決する方法
MacでGalaxyS2が認識してくれなかった時の解決策


USBテザリング – Klink


GalaxyS3 は、Wifi テザリングが利用できるはずですが。
いったん繋がってもブツブツ切れて、使用に耐えません。
USBテザリングも利用できるはずですが。
残念ながら Windows だけで、MAC では利用できません。

そこで、Klink をインストールしてみました。
以前は、EasyTether を使っていたのですが、ADB と共存できるないという欠点がありました。
Klink はこの問題がないうえに、値段も安いですね。

参考
Klink – Tether without root
root不要でUSBテザリングできるアプリ「Klink」は使える機能がいろいろ


GalaxyS3 を Mac に認識させる – Android File Transfer


GalaxyS (Android 2.1) は外部USBとして使用できたのですが。
GalaxyS3 (Android 4.0) はデフォルトでは認識しないようです。

そこで Android File Transfer を使いました。
転送モードは、メディアデバイス(MTP) ではなく、カメラ(PTP) です。

参考
Google: Macintosh パソコンへの接続(USB 経由)
GalaxyS3をMacに認識させる
Android File Transfer
MTP: Media Transfer Protocol
PTP: Picture Transfer Protocol


新しい MAC が届いた


新しい MacBookPro が届いた

MacBookPro が起動しなくなったので、修理依頼をしたところ、
修理依頼が5回目なので、新品と交換してくれることになった。

旧: MacBook Pro 13-inch, Early 2011
新: MacBook Pro 13-inch, Mid 2012

少し性能アップした。

HDD を TimeMachine から復元中

関連
MAC が修理から戻ってきた
MAC が修理から戻ってきた (2回目)
MAC が修理から戻ってきた (3回目)
MAC が修理から戻ってきた (4回目)
・新しい MAC が届いた


GALAXY S III SC-06D


ドコモの GALAXY S III SC-06D に機種変更しました。
今までは GALAXY S を使っていましたが。
そろそろ Android 4.0 機が欲しくなったので。

S に比べると S3 は画面操作が滑らかです。
画面の切替えでは、アニメーションが入ります。

海外モデルに比べると、いくつかスペックダウンしています。
クアッドコアでなくデュアルコアです。
これは、LTE Xi とのトレードオフらしいですが。
特に不満はないです。

NFC ではなく Felica を内蔵しています。
これは、おサイフケータイへの対応のためですが。
NFC / Felica の両方に対応して欲しかったですね。
NFC 内蔵の GALAXY NEXUS が全くというほど売れなかったことへの反動でしょうかね。

参考
GALAXY S III SC-06D
GALAXY NEXUS SC-04D
GALAXY S SC-02B


HelloSpellChecker – Android 4.0


20120706hello_spell_checker_large

Android 4.0 から、SpellChecker が追加されました。
指定された単語に対して、スペルチェックを行い、候補を返します。

サンプルコード
Android 4.0 の SDK に サンプルコード HelloSpellChecker が入っています。

試してみました。
下記のような表示がされるが、訳が分かりません。

this (1)
(-1)
(-1)

ソースを読んでみました。
(1) SpellCheckerSession#getSuggestions でスペルチェックをしたい単語を指定します。
(2) SpellCheckerSessionListener#onGetSuggestions で結果が返ってきます
(3) SuggestionsInfo#getSuggestionsCount で候補の数を取得します。
0 なら、 スペルチェックOK。
-1 なら、スペルチェックNGだが、該当する候補なし。
(4) SuggestionsInfo#getSuggestionAt で候補を取得します。

表示の意味は、下記の3つの単語をチェックしたところ、次の結果が返ってきた。
tgis -> this
hllo -> 該当する候補なし
helloworld -> 該当する候補なし


AppNavigation – Android 4.0


20120715app_navigation_main

Android 3.0 から ActionBar が追加され、UP ナビゲーションが出来るようになった。
それまでは、BACK ボタンにより、前のタスクに戻る動作しか出来なかった。
ActtionBar に、UP ナビゲーションのアイコンを表示し、アプリの階層構造に従って移動できるようになった。
20120715_up_navigation

Android 4.0 から、android:parentActivityName が追加され、明示的に親のActivityが指定できるようになった。
同時に、互換ライブラリ android.support.v4.app が提供され、Android 1.6 以降からナビゲーションが出来るようになった。

Navigation with Back and Up | 日本語訳

サンプルプログラム

Android 4.0.3 (API 15) の SDK にサンプルコード AppNavigation が入っています。

試してみました。
複数の Activity を移動する複雑な動きをするので、何が正しい動作なのかを理解できなくて、少しまごつきました。
onPause や onResume などのライフサイクルをトレースすることで、動作が理解できました

■ App Navigation Home

アプリを起動すると、複数のボタンが並んだメニューが表示されます。
ボタンをクリックします。
20120715app_navigation_main

■ Simple Up Navigation

シンプルな例です。
異なるタスクを遷移する必要がなく、単純に上に戻る場合です。
アクションバー上で、UPアイコンを押すと、メイン画面に戻ります。
UPアイコンとBACK ボタンは、タスクのスタックを離れて、同じ動作をします。

進む動作
AppNavHome -> SimpleUp
戻る動作は、BACK と UP で同じです。
SimpleUp -> AppNavHome
20120715app_navigation_main => 20120715app_navigation_simple => 20120715app_navigation_main

■ Peer Activities

複数の Activity タスクを起動する例です。
Peer では、自分自身へのリンクが表示されます。
BACK ボタンを押すと、1つ前のタスクに戻ります。
UP アイコンを押すと、タスクスタックをクリアして、常にホーム画面に戻ります。

進む動作は、自分自身を起動して、複数の Activity タスクを発生します。
AppNavHome -> Peer1 -> Peer2 -> Peer3
20120715app_navigation_main => 20120715app_navigation_peer_1 => 20120715app_navigation_peer_2

戻る動作は、BACK と UP では異なります。
BACK
Peer3 -> Peer2 -> Peer1 -> AppNavHome
20120715app_navigation_peer_2 => 20120715app_navigation_peer_1 => 20120715app_navigation_main

UP
Peer3 -> AppNavHome
20120715app_navigation_peer_2 => 20120715app_navigation_main

■ Content Category

親の Activity に戻る例です。
Content Category の下に Content View があります。
Content View にて、UP アイコンを押すと、Content Category に戻ります。
Content Category にて、UP アイコンを押すと、ホーム画面に戻ります。

進む動作
(A) appNavHome -> (B) ContentCategory -> (c) ContentView
20120715app_navigation_main => 20120715app_navigation_category => 20120715app_navigation_categroy_view

戻る動作は、BACK と UP で同じです。
(c) ContentView -> (B) ContentCategory -> (A) appNavHome
20120715app_navigation_categroy_view => 20120715app_navigation_category => 20120715app_navigation_main

■ View form other task

少し複雑な例です。
Activity が独自のタスクスタックを持っていて、他の Activity から起動されます。
このシナリオでは、一般的なナビゲーションや、ダイレクトに親に戻るナビゲーションを示すために、タスクスタックの統合を行います。

進む動作は、下記の画面遷移をします。
(A) AppNavHome -> (B) ViewFromOtherTask -> (c) OutsideTask -> (D) ContentView
20120715app_navigation_main => 20120715app_navigation_other => 20120715app_navigation_other_outside => 20120715app_navigation_other_view

戻る動作は、BACK と UP では異なります。
BACK
(D) ContentView -> (c) OutsideTask -> アプリ終了
20120715app_navigation_other_view => 20120715app_navigation_other_outside => 20120715app_navigation_finish

UP
(D) ContentView -> (E) ContentCategory -> (A) AppNavHomeActivity
20120715app_navigation_other_view => 20120715app_navigation_other_category => 20120715app_navigation_main

■ Notifications

これは、通知バーの機能です。
2種類の通知を発生します。
通知を開いたときの動作が異なります。

(1) ダイレクト通知
アプリの中のコンテンツに直接リンクしています。
例えば、SMS の通知などで使用します。
このサンプルでは、ContentView を開きます。
その先はアプリを起動したときと同じ動作になります。
BACK と UP で動作は同じで、下記のように画面を遷移します。
ContentView -> ContentCategory -> AppNavHome -> (BACK) -> 元の画面
20120715app_navigation_direct_notification
20120715app_navigation_direct_view => 20120715app_navigation_direct_category => 20120715app_navigation_main => 20120715app_navigation_finish

(2) Interstitial 通知
アプリを起動することなく、すぐに廃棄される通知です。
例えば、カレンダー・イベントの通知などで使用します。
このサンプルでは、ポップアップ画面を表示します。
画面の遷移はしません。
BACK で、元の画面に戻ります。

Interstitial
一時的に介在するという意味らしい。

20120715app_navigation_interstitial_notification
20120715app_navigation_interstitial_popup => 20120715app_navigation_finish

ソースコードの簡単な説明

10個のソースコードがあります。
(1) AppNavHomeActivity.java
メインの Activity です。

(2) SimpleUpActivity.java
Simple Up Navigation の Activity です。
UP ナビゲーションに NavUtils#navigateUpFromSameTask を使っています。

(3) PeerActivity.java
Peer Activities の Activity です。
UP ナビゲーションに NavUtils#navigateUpFromSameTask を使っています。

(4) ContentCategoryActivity.java
Content Category の Activity です。
UP ナビゲーションに NavUtils#navigateUpFromSameTask を使っています。
ContentViewActivity.java を呼び出します。

(5) ViewFromOtherTaskActivity.java
View from other task の Activity です。
UP ナビゲーションに NavUtils#navigateUpFromSameTask を使っています。
OutsideTaskActivity.java を呼び出します。

(6) NotificationsActivity.java
Notifications の Activity です。

(7) ContentViewActivity.java
ContentCategoryActivity から呼び出される Activity です。
UP ナビゲーションに NavUtilsTaskStackBuilder を使っています。

(8) OutsideTaskActivity.java
ViewFromOtherTaskActivity から呼び出される Activity です。

(9) InterstitialMessageActivity.java
Interstitial 通知から呼び出される Activity です。

(10) ActionBarCompat.java
UPナビゲーションの下位互換クラスです。


ToyVpn – Android 4.0


20120705toyvpn_connected

Android 4.0 から VPN Service がサポートされました。
VPN Service によって、アプリが自身の VPN (Virtual Perivate Network) を構成し、Service として走らせることができます。 VPN サービスは自身のアドレスとルーティング規則で virtual network へのインタフェースを作成し、ファイルディスクリプタですべての読み込みと書き込みを実行します。

VPN service – Android 4.0 APIs | 日本語訳

サンプルコード
Android 4.0 の SDK に サンプルコード ToyVpn が入っています。

試してみました。
(1) VPN サーバーを用意する
サンプルコードにある ToyVpnServer.cpp をサーバー側にインストールする。
ソースに記載されている手順とおりでよいが、CentOS では一カ所だけ違っていた、

# g++ -o ToyVpnServer ToyVpnServer.cpp
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE

// # ip tuntap add dev tun0 mode tun
// Object "tuntap" is unknown というエラーになるので
// 下記に置き換える
 ↓
# tunctl -n -t tun0

# ifconfig tun0 10.0.0.1 dstaddr 10.0.0.2 up
# ./ToyVpnServer tun0 8000 test -m 1400 -a 10.0.0.2 32 -d 8.8.8.8 -r 0.0.0.0 0

(2) Android 端末にて、アプリを起動する
Server Address などを入力して Connet する。
警告 Attenntion が出るが、先に進む。
(3) VPN サーバーに接続すると、メイン画面に戻る。
アクションバーに鍵マークがついていれば、VPN 接続が出来ている。
20120705toyvpn_enter20120705toyvpn_attention 20120705toyvpn_connected

(4) 切断する。
通知バーを開く。
Disconnect ボタンをクリックする。
20120705toyvpn_notification20120705toyvpn_disconnect

サンプルコードの説明
(1) ToyVpnClient.java
VpnClient の Activity です。

(2) ToyVpnService.java
VpnService を継承した ervice です。

参考
VpnServiceに挑戦
Android VpnServiceの和訳


VoicemailProviderDemo – Android 4.0


20130704voicemail_provider_send

Android 4.0 から、VoicemailProvider がサポートされました。
Voicemail Provider によって、全てのボイスメールを1カ所で表示することが出来るようになりました。複数のアプリからボイスメールを追加することができるようになりました。例えば、電話のサービスプロバイダーから, VoIP から, その他代わりの音声サービスから。

Voicemail Provider – Android 4.0 APIs | 日本語訳

VoicemailProvider の サンプルコード が公開されています。

Android 4.0 の端末で、試してみました。
(1) 起動すると、Record voice ボタンと Send ボタンが表示されます。
(2) Record voice ボタンにタッチして、音声が録音します。
(3) 論音が終了すると、Disccard ボタンと Doneボタンが表示されます。
(4) Record voice ボタンにタッチすると、メイン画面に戻ります。
20130704voicemail_provider_main20130704voicemail_provider_recording20130704voicemail_provider_done

(5) Send ボタンにタッチすると、Calllog に登録して、アプリが終了します。
デモなので、ボイスメールの送信はしません。
20130704voicemail_provider_send

(6) Phone アプリから、Calllog を開きます。
通話記録の一覧が表示されます。
その中にデモアプリで作成したボイスメールがあります。
(7) ボイスメールの項目を開きます。
詳細が表示されます。録音された音声も再生できます。
20130704voicemail_provider_calllog20130704voicemail_provider_calllog_deatil