2011年12月24日土曜日

[Power saveing] 節電を簡単にする道具

How to save power in real life #2

もうすっかり冬です。夏に比べて冬の方が電力需要が多いため、節電しなければなりません。計画停電のときの苦労は二度としたくないですからね。

Mtkは、楽に節電するためUSB連動タップを使ってます。
USB端子を持つホスト器とタップの電源を連動できます。
たとえば、パソコンの電源に連動してディスプレイの電源をオン/オフする、といった使い方ができます。
節電のみならず、電源操作の手間も減らせて一石二鳥です。

ところで、この夏は発熱する物はすべてコンセントを抜いていたのですが、テレビ用のアンテナブースターだけはむやみに抜くわけにはいきませんでした。
最近のテレビにUSB端子がついているので、テレビの電源に連動して周辺機器(アンテナブースターやオーディオアンプなど)の電源をオン/オフするためにUSB連動タップを使いました。
おかげで、周辺機器の電力消費と発熱を抑えることができました。
アンテナブースターは発熱が多くて不安でしたがこれで解消しました。アンテナブースターはアナログアンプ回路なのでスイッチング電源を使えないみたいです。

関連ネタ 夏に備えて節電対策
それでは皆さんよいお年を!

2011年12月17日土曜日

[Android] x86用Android4.0(ics-x86)はVmwareで使えるか?

Trying to run Android4.0-x86 on Vmware

x86用Android4.0が公開されました。
Android-x86(http://www.android-x86.org/download)が次の4つのプラットフォーム用にAndroid-x86-4.0-devel を公開しました。
・AMD Brazos
・ASUS laptop
・ASUS Eee PC
・Tegatech tegav2 tablet

無理を承知でこれらのディストリビューションをVmwareで起動してみました。
関連ブログ [Android] VmWare PlayerでAndroidをデバッグする
起動する操作は次の通りです。

Vmwareを起動し「新規仮想マシンの作成」をクリック

「インストーラーディスクイメージファイル」をクリックし、ダウンロードしたisoファイルを選択して次へ

仮想マシン名はご自由に。Mtkは「android-x86-4.0」と入力しました。
格納場所はデフォルトのままでも結構です。Mtkは十分な空き容量のあるDドライブを指定しました。

ディスク容量の指定はデフォルトのままで結構です。Mtkは1GBにしました。

完了

ここからは操作方法が変わります。
Vmwareのウィンドウをクリックすると、マウスポインターが消えてVmwareだけ操作できます。
Windowsの操作に戻るにはCtrlキーを押しながらAltキーを押します。
この画面ではカーソルを一番下のInstallationに移動しEnterを押します。

インストールが始まるのですが・・・

検証した結果
android-x86-4.0-devel-amd_brazos.iso
ブートから先に進まず。

android-x86-4.0-asus_laptop-20111209.iso
インストールしようとするとディスクのフォーマットに失敗して先に進まず。
ライブCDではnot asusの警告が出て先に進まず。

android-x86-4.0-eeepc-20111209.iso
ライブCDは起動するものの、ほとんど操作を受け付けず。

android-x86-4.0-eeepc-20111209.iso
ブートから先に進まず。

というわけで、残念な結果となりました。

今のところ、PCで動作するAndroid4.0エミュレーターはAndroid-SDK-r15に含まれる公式のみのようです。
公式エミュレーターはARMをエミュレートしているので再現性は高いのですが、遅くて不安定なのが玉に瑕です。

以上、参考になれば幸いです。

2011年12月10日土曜日

[Android] アプリケーションでデータ通信のオン・オフを設定できない理由

Reasons for failing to switch mobile networks

データ通信をオン・オフするアプリケーションを作ろうとしたら、不可能であることがわかりました。
1.隠しメソッド
データ通信をオン・オフするための機能はTelephonyManagerクラスにあるのですが、隠しメソッド(@hideアノテーション)のためアクセスできません。
隠しメソッドにアクセスするためリフレクションを使うとこんなコードになります。

※ユーザーインターフェースの実装を省略しているのでこのままでは動きません

これにユーザーインターフェースを実装してアプリケーションとして完成させるとエミュレーターで動作することは確認できました。

2.パーミッション
上のソースは実機は動作しません。
動作させるためのパーミッションが2つあります。
android.permission.MODIFY_PHONE_STATE
android.permission.WRITE_SECURE_SETTINGS

このうち、WRITE_SECURE_SETTINGSはアプリケーションがマニフェストに宣言しても実機での動作では許可されてません。
データ通信の他、bluetoothの設定変更もWRITE_SECURE_SETTINGSが必要なようです。

ユーザーの知らないうちに勝手にデータ通信やbluetoothの設定を変えられたら不都合なので、セキュリティーレベルが高くされているのは仕方ないかもしれません。

以上、参考になれば幸いです。

2011年12月3日土曜日

[Android] ライブ壁紙の作り方

How to code live-wallpaper applications
ライブ壁紙のアプリケーションを作ってみました。
対応OSはAndroid2.1以上です。
ライブ壁紙の作り方はさぞかし難しいだろうと思っていたのですが、プログラム的にはSurfaceViewと同じで意外と簡単でした。
以下ソースです。

マニフェスト(AndroidManifest.xml)
リソースファイル(res/xml/wallpaper.xml)
ライブ壁紙のソース(WallpaperSasmple.java)

このライブ壁紙は画面をタップすると徐々に大きくなる円を描き、指を離すと徐々に消えていきます。
円の色は5種類です。
円の数の上限を決めてないのでたくさん表示させることができますが、動作が遅くなるかもしれません。

以上、参考になれば幸いです。

2011年11月26日土曜日

[Android] マルチタッチアプリケーションの作り方

How to code multi touch applications

LYNX3D SH-03Cでマルチタッチに反応するアプリケーションを作ってみました。Android2.1以上に対応します。
指でタッチした場所に円を表示します。5本の指まで反応します。
以下サンプルです。

アクティビティー(Main.java)
マニフェスト(AndroidManifest.xml)
それぞれの円は指の動きを追いかけます。
このアプリを作った時点では、マルチタッチは公式には3本指までしかサポートしていないようで4本以上の指を認識するには隠しパラメータを読み取る必要がありました。(onTouchEventイベントの 0x305 とか 0x036 とか)
実際にタッチしている指の数とAPIの値が一致しないので円が一つ多く表示されることがあります。

MotionEventクラスにはdeprecated(非推奨)にされた定数とメソッドがあるのでご注意ください。
詳細は http://developer.android.com/intl/ja/reference/packages.html をご覧ください。

以上、参考になれば幸いです。

2011年11月19日土曜日

[Application] Wi-Fi sync Screen v1.03公開

Androidアプリケーション Wi-Fi sync Screen v1.03 を公開しました。
"Wi-Fi sync Screen"はWi-Fiスリープを解除した端末のバッテリーを長持ちさせるアプリケーションです。
Android端末をWi-Fi接続すると再起動してしまうAirStationなどをお使いの方におすすめです。
詳細はこちら

v1.03での変更点
安定性向上

ダウンロードはこちら
※ダウンロード前にエンドユーザーライセンス契約(EULA)を必ずお読みください。
https://market.android.com/details?id=jp.fujiu.AndroidApp.WifiSyncScreen Android Market

◆トラブルシューティング◆
Wi-Fi Sync Screenを設定してもAirstationが再起動する(Wi-Fiルーターが誤動作する)場合は、Android端末のWi-Fiのスリープを解除してください。

Recovered from crash の表示について
Android1.6では画面を開いたとき "Recovered from crash"と表示されることがあります。
リソース不足により動作できなくなったWi-Fi sync Screenを回復したことを意味します。
このメッセージが表示される場合は次の対策を推奨します。
・OSを可能な限り最新版にバージョンアップする
・使用していない常駐アプリケーションを停止する
この機能はv1.03で追加されました。

[Android] 新旧のAndroidで動作するServiceの作り方

How to able to run service applications on all OS versions

ServiceクラスのonStartメソッドはdeprecated(非推奨)に指定され、Android2.1以降では使うべきではないメソッドになってしまいました。
実際にAndroid2.1以降ではonStartメソッドが呼ばれないことがあります。
代替メソッドとしてonStartCommandメソッドが用意されましたが、Android1.6にはonStartCommandメソッドがありません。

1.6以降のどのAndroidでも同じように動作するサービスアプリケーションを作るには、onStartメソッドとonStartCommandメソッドの両方を実装します。
1.6以降のAndroidに対応させるので、プロジェクトのBuild TargetはAndroid1.6(API Level 4)とします。
以下はサンプルです。

サービスクラス(MyService.java)


Activity(Main.java)


マニフェスト(AndroidManifest.xml)


このプロジェクトを実行するとActivity(真っ黒の画面)が表示されている間だけMyServiceクラスが起動します。
実行するとAndroid1.6ではonStartメソッドが、Android2.1以降ではOnStartCommandメソッドが呼ばれます。

Build TargetにAndroid1.6をしていたい場合は、onStartCommandメソッドはオーバーライドせずに(@overrideアノテーションを書かずに)コーディングします。
Eclipseを使う場合、[ソース]-[メソッドのオーバーライド] メニューを開いてもonStartCommandメソッドは選べません。メソッド名や引数を間違えないようにAndroidリファレンスからコピーします。

onStartCommandメソッドを使う上で特に注意することがあります。
サービスはOSによってrestartされることがあるのですが、restartされたときに呼ばれるonStartCommandメソッドの引数 intent は null です。
(return START_STICKY; と指定した場合)
Android1.6とAndroid2.xとでは、restartされたときの引数の内容が異なります。

また、Android1.6では「No more background processes」によりrestartされてもonStartメソッドが実行されないことがあります。
Android1.6のサポートが難しくなってきました。

以上、参考になれば幸いです。