Android: 2つ目のアプリを公開しました

Android端末上で画像ファイルの向きなどの詳細情報を
確認しようと思ったら、意外と様々な詳細情報を表示するアプリがありませんでした。

なので、作りました。

何の面白みも無いんですが、開発者にとっては使う機会はあるかと思います。

プログラム自体は数十分で作れるほどの簡単なもの。

アイコンの作成に丸一日かかりました(笑)

詳細は↓ここから。
ImageDetail@アンドロイドマーケット

Mac: ネットワーク接続時にホスト名が変わるのを防ぐ

Mac OS XではデフォルトでDHCPサーバから
与えられたホスト名を使用するようになっている。

なので、ローカルで設定しておけばそちらが優先される。
/etc/hostconfigのHOSTNAMEに設定すればOK。

例)
HOSTNAME=myhostname

Mac: gitで取得したテキストファイルが開けない

Macで作成したテキストファイルをいったんgitレポジトリに上げて
再取得すると同じMacでもファイルが開けないことがあります。

レポジトリに上げると拡張属性が失われることが原因のようです。

Macで作成したテキストファイルを’ls -l’で見てみると
“@”が属性についていますが、これが拡張属性です。

いったんレポジトリに上げて再取得したファイルからはこれが消えています。

修正するには下記のコマンドを適用します。UTF-8を使用している場合です。
“Mac: gitで取得したテキストファイルが開けない”の続きを読む

Mac: USBメモリを勝手にマウントさせない

私が使用しているemobileのUSBモデムにはユーティリティソフトの
インストーラを格納したROMが入っており、
Macに接続するたびに使いもしないROMドライブがマウントされます。
非常にうっとうしいので、勝手にマウントされない方法を探しました。

Macではdiskarbitrationdとうデーモンがディスクのマウントを管理しているようです。

Linuxでは/etc/fstabを編集してディスクのマウントの制御をしますが
Mac(OSX 10.6.6)にはもともとfstabファイルは存在しません。
しかし、このデーモンのmanページによると、/etc/fstabがあればちゃんと見ているようです。

なので/etc/fstabを作成し、下記の行のような記述をしてやります。
UUID=A97C9EAF-E18F-3BE3-80CD-8A8C6FB6E8E7 none hfs r,noauto

UUIDはデバイス毎に異なるので、デバイスを接続し下記コマンドで確認します。
Volume以下は私のモデムの例です。
# diskutil info /Volumes/EMOBILE_UTILITY

Android:UIの基本中の基本だけど大事なこと3

3. UIスレッドと非同期処理

前述しましたが、例えば画像のダウンロードなどの時間のかかる処理は
UIスレッドとは別のスレッドで実行すべきです。

ここで問題になるのは、別スレッドで実行した結果をどのようにしてUIへ反映させるかです。
AndroidではUIへの変更はUIスレッド以外から行うことができないためです。

Androidでは別スレッドの結果をUIに反映させるには下記に示す2通りの方法があります。
1. Thread + Looper + Handlerを使用する
2. AsyncTaskを使用する

一般的にスレッド間でやり取りをする場合は1を使用しますが、
「別スレッドで処理しUIにフィードバックする」という場合は、
2のAsyncTaskを使用すると非常に簡単に記述することができます。



AsyncTaskはAndroidバージョン1.5 (API level 3)から使用可能なので
2011年3月現在ではほとんどのAndroid端末で使用可能と考えてよいでしょう。

AsyncTaskを使用する方法は非常に簡単です。
“Android:UIの基本中の基本だけど大事なこと3”の続きを読む

希望って"ある"もの?

先日テレビで「失った希望」とか「希望がある」とか言う言い方をしていたけど、
俺は希望とは誰かに与えられたり、降って沸いて出てくるものでもないと思う。

生きている限り、自分の気持ち次第で希望は持てるものだと思う。

恵まれた環境に居る俺が言っても説得力ないが、ただなんとなく、そう感じた。

Mac:ネットワーク接続をトリガに/etc/hostsを切り替える

同じLAN内からWAN側アドレスを指定してアクセスすると
一部のルータにアクセスを拒否されるため、
サーバと同じLANに接続した場合はサーバへのアドレスを
ローカルIPで解決するということをします。

ちなみに、ここで示す方法はMac独自のサービスlaunchdを使用するため、
Macに限った方法になります。

Mac OS XではLinuxのinetdなどに代わりlaunchdがサービスを司っているようで、
ネットワークの状態を監視してスクリプトを実行するというデーモンを作成します。

大部分をMuraseさんのサイトを参考にさせてもらいました。

やることは大まかに下記の三つとなります。
・ネットワーク監視サービスをXMLで記述
・/etc/hostsを変更するスクリプトを記述
・それぞれの設定のhostsファイルを準備
“Mac:ネットワーク接続をトリガに/etc/hostsを切り替える”の続きを読む

震災から10日・・・

東北関東大震災から10日経ちましたが、世の中でいろいろあったせいか
震災がずいぶん前のように感じます。

私は地震当日は新宿のビル5階で仕事をしており、
かなりの揺れを感じたので指定の避難場所まで出て行きました。

外の公園に避難している間も、余震で大きなビル群がグネグネ揺れていました。

その日は電車が動かず会社に泊まることになりました。
帰れない組の同僚と近所の中華料理屋で飲んでいるときは
まさか、東北で戦後最悪の災害になっているとは夢にも思っていませんでした。

こんな私も実は予備自衛官なので、少しでも被災された方のお役に立てればと思い、
災害派遣希望を連絡したうえで、招集がかかることを待っている状態です。
待っている間に私にできることは、節電と募金くらいでしょうか。

先週は仕事も自宅作業ということだったので、
地震のせいか落ちていた自宅サーバの復旧をしつつ、
節電で薄暗くて寒い部屋で、仕事をしていました。

それでも、被災地の方々よりも幸せな環境にいることを感じながら。

亡くなられた方々のご冥福を心からお祈りするとともに、
被害に遭われた方とそのご家族に心からお見舞いを申し上げます。

そして、まだまだ少しでも多くの生存者が見つかることを願っています。

Android:UIの基本中の基本だけど大事なこと2

2. UIの基本的な考え方

1. Viewを切り替えるのではなくActivityを切り替える

もちろん、Activityの中のViewを切り替えることは可能です。
例えば、ViewFlipperやSlidingDrawerでImageView等をかっこ良く入れ替える場合は
確かにViewを切り替えるのが適切です。
しかし、多くの場合、UIのレイアウトを変更する場合等は基本的にViewではなく
Activityを切り替えることをお勧めします。

なぜなら、Androidがそもそもそのようにできているからというのと、
“Android:UIの基本中の基本だけど大事なこと2”の続きを読む

Android:UIの基本中の基本だけど大事なこと1

今回は初歩的な内容ではありますが非常に重要なこともあるので
以下3つについて書くことにしました。

  1. Layoutとソースコードの接続
  2. UIの基本的な考え方
  3. UIスレッドと非同期処理

1. Layoutとソースコードの接続

Androidの基本中の基本ですがGUIはJavaソースコードの中でインスタンス化するか
XMLファイルで定義するかのどちらかになります。

前者はnewで直接参照を得られますが、
後者はRという名の自動生成オブジェクトを介して参照を取得します。
下図の様になります。

ついでですが、Rオブジェクトが生成されていない時点ではRが解決できずにエラーの表示がされます。
レイアウトxmlファイルを定義、または変更したらすぐにビルドしてRオブジェクトを再生成すると良いでしょう。

Android:開発備忘録 Index