Flex、AIR、Java、Androidなど

Archive for 2月 24th, 2009

先日から作っていた端末を振ることでタスクの切り替えを行うアプリケーション、一応動くようになったのでソース貼っておきます。
※センサーの実装部分はほとんどeggさまに教えてもらった実装そのままとコピペです。いつもありがとうございます。
パッケージはこんな感じ。

ShakeAgent.javaはActivityを継承、ShakeDetectorはServiceを継承、TriggerOnBootはBroadcastReceiverを継承し、デバイスの起動時に呼ばれるクラスです。
基本的にShakeAgentの起動時、もしくは端末の起動時にShakeDetectorがstartSeviceされ、端末の非ロック時にはServiceがバックグラウンドで振動を監視し、振動を検知したらタスクを切り替えます。
一応端末の振りの強さで処理を分岐させる関数も残してありますが、とりあえず現在は強く振っても弱く振ってもタスクの切り替えを行うよう記述しています。
パッケージとソースを見てもらえれば分かるかと思うのですが、なるべく機能の追加をしやすいようにしています。例えば「強く振ったときに電話をかける画面を開きたい」など振ったときに別の処理を行いたい場合はworkerパッケージ内に適当なクラスを追加し、ShakeDetectorの実装を変えてやれば簡単にできるかと思います。
TaskSwitcherクラスは前回振られたときからの時間を測定し、短いスパンだったらタスクリストの途中のActivityを呼ぶようにしているのでShakeDetectorのコンストラクタで初期化していますが、場合によってはローカルでも、staticでもいいかもしれません。
昨日悩んでいたSecurityExceptionについては、
E/AndroidRuntime( 2269): java.lang.SecurityException: Permission Denial: starting Intent { action=android.intent.action.MAIN categories={android.intent.category.LAUNCHER} flags=0×10000000 comp={com.android.calendar/com.android.calendar.DayActivity} } from ProcessRecord{43616330 2269:biz.stachibana.ShakeAgent/10067} (pid=2269, uid=10067) requires null
というような感じでそのアプリケーションが最初に起動するActivityを取れていないのが原因ぽかったので色々やってみて、
List<ActivityManager.RunningTaskInfo> runningTasks = new ArrayList<ActivityManager.RunningTaskInfo>();



intent.setComponent(runningTasks.get(currentIndex).baseActivity);
ではなく、
List<ActivityManager.RecentTaskInfo> runningTasks = new ArrayList<ActivityManager.RecentTaskInfo>();



intent.setComponent(runningTasks.get(currentIndex).baseIntent.getComponent());
とやってやることで解決しました。
apkは以下からダウンロードできます。
※アプリケーション、プログラムを利用した事によるいかなる損害への一切の責任を負いません。ご利用は自己責任にてお願いいたします。
ShakeAgent_alpha_signed.apk
何かあればコメントにてお願いします。
では、長いですが以下に全てのソースを貼っておきます。汚いと思いますので是非つっこみをお願いしますm(_ _)m


Categories

 

2009年2月
« 1月   3月 »
 1
2345678
9101112131415
16171819202122
232425262728  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here