日記:Pythonに挑戦した

Pythonに挑戦したといっても、まだ全然なんですが。
Android携帯のステータスバーにバッテリー残量を数値で表示するための方法を探ってたのですが、どうも画像でみんなやっているみたいなので、じゃあ自分もそうしようかと考えたわけです。しかし、さすがに画像200枚にいちいち数値入力して保存とかしとられんから、プログラミングで出力したいなぁと思っていたので、ついでだからPythonでやってみようと思った次第です。

作業は今日はWindowsでやりました。まぁちょっとExcelをいじる作業をしていたので、ついでにそのままこっちでやっちゃおうというのもあって。WindowsにPython2.6をインストール。2系では2.7が最新なのですが、PILという画像用のライブラリが2.7用になかったので(あったんだけどうまく動かなかった)、2.6にしています。まぁGAEは2.5だという話だし、まぁいいかと。

とりあえず四苦八苦しながらも、やりたいことはできたので、ソースは後日公開するか、欲しい人だけにあげようかと思ってます。あまりにも適当なので。でも動けばいいというのも、ある意味プログラム。自己責任で、かつ、単純な用途な場合はこのようなのがいいんですよね。

Pythonの感想は、文法がシンプルだからわかりやすいなと思いました。
まだほとんどやってないし、クラス作ったりとかはしてないんだけど。

さて、昨日に引き続き、電源管理については、ずっと調べていたのですが、やっぱりなさそうだなぁと思って思いあぐねていたら、@keiji_ariyamaさんから、隠しメソッドになっているという情報をいただきました。このことで相当イライラしていたので、かなりありがたい情報でした!twitterのつながりは本当にありがたい!!

BatteryCrystalは1.6向けと2.0以上向けでアプリを分けたほうがいいかもなぁと、ちょっと思い始めてます。できることの範囲が違いすぎるので…。1.6ユーザのことを考慮していると、機能的に弱くなることもあるし、難しいところなんですが。両方サポートするにも時間がかかるし、無料アプリなので、悩ましいところです。ウィジェットで広告課金は見込めないし…。BatteryCrystalは寄付ウェアにしようかなと思ってます。前にそういう意見もいただきましたし、Androidアプリで食っていける道を模索しようと思います。

もうあと2ヶ月くらいで退職予定だしなぁ…。
もっと技術力つけないと!
そして皆さんの役に立ちつつ、利益を生み出してくれるアプリを作るぞ!


Android:1.5で自動で同期設定を上書きする方法?

Android 1.6で、「自動で同期」の設定を、設定画面を介さずに上書きする方法を探しているのですが、まだ見つかりません。とりあえず1.5で行う方法を英語のMLで見つけたので、それを書いておこうかと思います。ただし、私は1.5の端末持ってないから、1.5では試してないのであしからず。1.6で試したら、例外が発生して落ちました。

参照先の情報は下記のURLです。
http://groups.google.co.jp/group/android-developers/browse_thread/thread/7766da379c847a88?pli=1

final Uri CONTENT_URI = Uri.parse("content://sync/settings"); 
ContentValues values = new ContentValues(); 
values.put("name", "sync_provider_contacts"); 
values.put("value", "true");  // Stringでtrueを指定する
getContentResolver().insert(CONTENT_URI, values); 

1.6でできる方法がわかったら、また書こうと思います。

(追記)
1.6のほうではメソッドが@hideになっており、隠しメソッドになっているという情報をtwitter上でいただきました。リフレクションでメソッド取得して無理矢理呼べば出来そうという話だったのですが、そこまでする気はなかったので本件はクローズします。


Android:アプリを通知領域に常駐させる

音声エディタを通知領域(ステータスバー)に常駐させるようにしたので、そのやり方などを書いておこうかと。

通知はNotificationクラスを使います。
アプリの常駐は、このNotificationのインスタンスのflagsにFLAG_ONGOING_EVENTを設定するというだけです。これだけで常駐アプリになります(実行中になる)。

// 通知領域に常駐させる
private void setNotification() {
	NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
	Notification notification = new Notification(R.drawable.icon, getString(R.string.app_name), System.currentTimeMillis());
	Intent intent = new Intent(this, VoiceEditor.class);
	notification.flags = Notification.FLAG_ONGOING_EVENT; // 常駐
	PendingIntent contextIntent = PendingIntent.getActivity(this, 0, intent, 0);
	notification.setLatestEventInfo(getApplicationContext(), getString(R.string.app_name), getString(R.string.notify_summary), contextIntent);
	notificationManager.notify(R.string.app_name, notification);
}

このままだと常に常駐するアプリになってしまうので(←言葉が変ですが)、PreferenceActivityとか使って常駐させるかどうかの設定をユーザにしてもらうほうが親切ですね。音声エディタはそのようにしています。

ちなみに常駐解除は以下。

private void cancelNotification() {
	NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
	notificationManager.cancel(R.string.app_name);
}

また、通知領域からアプリを起動した場合と普通のアイコンからActivityを起動した場合、アプリが複数起動してしまいます。
もし同じアプリは1つしか起動してほしくないよ!という方はマニフェストファイルのActivityの設定項目で、

android:launchMode=”singleTask”

を設定しておきましょう!これで幸せになれます。


日記:電源管理機能で苦戦中(進行形)

BatteryCrystalで、追加しようと思っている機能は次の通り。

  • 電源管理機能
  • ステータスバー常駐

まずは電源管理機能を実装したいなぁと思って、取り組みはじめたのだけれど、これがすごく苦戦中。電源管理とは、Desireで電源管理ウィジェットというのがあるので、まぁ似たような機能を実装させてしまえばいいかなと思ってます。似たもの作らなくてもええやん!?というのはあるのですが、自分の勉強のためと、アプリへのリクエストがあったからというのが作ろうとしている理由です。

電源管理の主な機能は、

  1. WiFiのON / OFF
  2. BluetoothのON / OFF
  3. GPSのON / OFF
  4. 自動同期のON / OFF

にしようと思ってるのですが、WiFi以外が苦戦中。他の機能に関してはAndroid 1.6で使えないAPIがほとんどで、検知はできるけれど設定画面を介しての変更(Activityのみで完結しない)になってしまってます。Bluetoothに関しては、@emasuiさんが作られているbackport-android-bluetoothを使えば出来そうだとご本人からtwitterでお聞きしたので、それでやってみようかと思ってます。

しかし@adakodaさんから1.6で電源管理機能できると聞いて、かなり混乱…。一体どうやったらできるのか、gitでSettingsのソースをcheckoutして、android-1.6_r2の電源管理ウィジェットのソースもそれなりに読んでみたのだけれどできないんじゃないかなと思っていたので。後に検索してみたものの結局わからずじまいだったので、一旦最初の方針でやってみようかなと思ってます。まぁ今日はもう時間一杯になってしまったので、終わりで。あとはもう一度Settingsのソースを読み直してみるか…。

ステータスバーへの常駐のほうが簡単に出来そうなので、まずはそっちをやっつけて波に乗ったほうがよさそうかもしれないとか考えてきてます。簡単なほうに流れてしまいそう〜(-_-;)


日記:瀬戸デ部第3回ミーティング

今日は瀬戸内デベロッパー倶楽部の第3回ミーティングの日。
昨日の1時過ぎくらいまで音声エディタのアップデートやってたから、起きれるか不安だったけど、なんとか朝6時半に起きた。シャワー浴びたり一通りの支度を整えて7時半過ぎに家を出た。今回は車で行くのではなく、フェリーで行くことにしていた。移動時間を勉強やコーディングに当てるためだ。どうせガソリン代や高速代がかかるんなら、そのほうがお得。乗る予定だったフェリーは8時20分発である。

8時過ぎに松山観光港に到着。あと15分くらいだったのだが、チケットを買う時間を考えると結構ぎりぎりだった。チケット売り場は列になっていたのだけど、10分前にチケットをゲット。それとほぼ同時に搭乗開始のアナウンスがなった。朝ご飯を食べていなかったので、急いで売店でサンドイッチを買ってフェリーに乗り込む。

フェリーの中でプログラミングしようかと思っていたのだけれど、寝不足で頭がボーッとしてたので、プログラムはやめて本を読む事にした。目の前で何かの同窓会なのか、色んな年齢層の男6人の酒盛りが始まった。まだ8時20分なんですけど…。しかもビール1本ずつとかじゃなく、缶ビールの段ボール1ケース持ち込んでいた。本気じゃないか!?
本を読み進めながら、ときどきツイッターをやるという感じ。眠いので集中力が持たない。途中で諦めて寝た。寝転がることができるスペースはもうほぼ占領されていたので、テーブルに突っ伏して寝たのだが、腕がしびれてきて目が覚めた。眠気は飛んだ。そして広島に到着。11時。早い。

広島の街にはほとんど慣れていないので、とりあえず会場を@Toro_kunさんが開発しているATND Checkerを使って会場の場所を表示して、乗る電車を決定。間違って広島駅方向に行くところだった(汗)こういうときにAndroidケータイは便利だ!
路面電車で移動したが、前に来た時に結構時間がかかると思ってたら、予想通り街中に出る頃には大体12時前くらいになっていた。本通で降りて、昼ご飯が食べられそうなお店を探す。やっぱりお好み焼きが食べたいなぁと思いつつ歩いてたら、サイゼリヤを発見した。まだ行った事がないので行ってみたいお店なのだが、さすがに行かなかった。
ひとまず瀬戸デ部の会場に行く方向に歩いていればなんかあるだろうと思っていたのだが、あるのは全国チェーン店ばかり。うーむと思っていたら、客引きをやっているお好み焼き屋さんがあったので、時間もあんまりないしおいしそうに見えたので行ってみた。

普段は1,000円以下くらいで済ませるんだけれども、なんか今日は気持ちが大きくなっていたのか、1,200円のやつにした。なんとかデラックスみたいなの。なんかネギがバーッとのってて、具もしっかり多くておいしそうだったので、ツイッターに写真付きで呟いておいた。食べてみたら、値段がそれなりにするだけあっておいしかった!お好み焼きも久々だったので余計においしかったのかもしれない。

お店を後にすると、もう会場は近くだった。最寄り駅が原爆ドーム前なので、原爆ドームの写真を撮ったりした後に会場に向かった。13時からスタートだったけども、ミーティングという名前だったけど集まった人数が少なかったので、もくもく会となった(もくもくとは、黙々とプログラム開発をすること)。

USTREAMでもくもく会の様子を流していた。東京から参加の@sardinejさんが来られて、twiccaの名刺交換をやろうとしたのだけどうまくいかずw。結局、QRコードを出してもらってバーコードリーダーで読んだ。

途中、@ryosmsさんがiPhoneで操縦するラジコンヘリコプターを持ってきていたので、それの操縦している様子を流したりしていた。あれは自分もちょっとだけ操縦させてもらったのだけど、本当にすごい!iPhoneの傾きでヘリコプターが運転できてしまうというのは面白い!広い障害物のないところで練習して自在に運転できたらすごく楽しくなるんだろうなと思った。

途中で念願の@okutobaさんに会うこともでき、名刺交換してレアな名刺をゲット!?USTREAMの通り、話しやすい方だなぁと思った。その後は自分のアプリ開発の続き(BatteryCrystalの機能追加)をやっていて、とりあえずやりたいことの入り口までは実装できた。ここで時間切れ。

広島Ruby勉強会も同じ建物内で行われていたようで、建物から出る際に、「よかったらどうぞ!」とRuby on 松江ラーメンをもらった!?その後、Android・Ruby合同懇親会をやることになって、飲み屋に移動。すごい楽しい話ができた。特に@sardinejさんから伺った東京のAndroidデベロッパーの様子とか、活動状況とかを聞くと非常に活発で内容も濃くて凄かった。やはり都会には人が集まるから情報の質が違う。いいなぁ〜と素直に思う反面、地方にいる自分たちももっと精力的に活動するべきだなぁと感じた。無茶ぶりをしても笑顔で応えてくれる@okutobaさんは本当にいい人だなぁとしみじみ思える飲み会だった。

自分は1次会で別れて、ホテルへ移動。ここでもGoogleMapsが役に立つ。迷う事なくホテルへ。本当に便利だわーAndroid、とつくづく思う。そしてホテルにチェックインして、ちょっとプログラムして、現在このブログを書いている。いい加減寝ないと明日活動できんぞ、俺!!