サンプルを動かしてうぇーいしてみる。OpenCV-2.4.8-android-sdk/samples/tutorial-1-camerapreviewをインポートして。うぇーいうぇーいできない??なんかダイアログでた??そしたら、ナウい日本人丸出しでYes!Yes!って答えておけばおk。端末の容量すげー食って嫌だよね。別荘にもワイフがいるようなものさ。(OpenCV開発者談)OpenCVはアプリの中に組み込むこともできるけど、マネージャアプリを通して端末にインストールされたOpenCVを利用することもできるんだ。このどっちの方法をとるかは、アプリをつくる側が決められる。サンプルアプリはマネージャアプリを使っている。件のダイアログを出して、この超ださいアイコンのアプリをインストールさせるのは気がひけるよね。Javaでいじっていればいい。OpenCVの内部はC/C++で書かれているので十分速いためだ。NDKから使えないと不便なときもある。JNIとJavaの橋渡しは少し時間がかかる。非常に頻繁に(それがどれくらいかはキミの想像に任せる)JavaからOpenCVのメソッドを呼び出していると、やがてその少しの時間がうざったくなる時が来るのだ。実装をC++で書いてしまったほうがラクだ。NDKを使うサンプルな。jniディレクトリがあるものが、NDKを使うサンプルだ。OpenCV-2.4.8-android-sdk/samples/tutorial-2-mixedprocessingが該当する。このプロジェクトをインポートすると以下の様なエラーがコンソールに出力されちゃったりしちゃうのだ。PATHまず、NDKを使えるようにしよう。Builderにする。したらビルドできて、動くよ。共有2014年2月8日土曜日Broadcast概要ブロードキャストとは不特定多数に同じ情報を同時に送ること。ここでいう「情報」とはなにか?AndroidではIntentを用いる。IntentをAndroid端末内に投げるイメージでよい。Androidのプロセス間通信に用いることができる。シャットダウンするよ〜とかアプリがインストールされたよ〜とかそういう系のactionをもつIntentはAndroidがブロードキャストしている。いうのをBroadcastReceiverで拾うことができる。いや、拾うだけじゃない。他のアプリケーションが、あとから実行できるIntent。Intentを他のアプリに渡す。他のアプリケーション(VM)に、あとで呼び出して欲しいIntentを作って渡す。いってもIntentは自分のアプリ内に対する、明示的なものじゃないとダメな。Intentの投げかたを指定する。IntentをContext.startActivity()Context.startService()Context.sendBroadcast()などに渡すとそのまま実行されるが、PendingIntent.getActivity()PendingIntent.getService()PendingIntent.getBroadcast()に渡すとそれぞれの保留Intentを取得できる。これを他のアプリケーションに渡してあげよう。やって実現されてるの。他のアプリ(VM)からIntent実行できるとかキモいよな。PendingIntentは親のアプリが死んでも使える。その実体は!?という感じだけど、PendingIntentはただのトークン。トークンとデータを紐付けているのはAndroidのシステム。大元のシステム側にデータを保存してるだけ。使いまわされるような仕組みになっている。同じようなやつかどうかはIntent.filterEqualsによって判定されるんだけど、これ、extraをみていない。categoriesが同じかどうかを判定している)だからextraかえたPendingIntentを2つ作ると、実体は1つだけになる。この使いまわしの方法はgetするときにflagで指定できる。使いまわされたくないなら、getするときのrequestCodeを別々の値にする。この設計思想はアレに似てる。他のActivityに対して返り値を1つだけ要求する。他のアプリに対してIntentを1つだけ要求する。それだけだとアレだから、ってのでrequestCodeが用意してある。requestCodeをアプリ内でユニークにしておけば、上書きされることは無い。自分の胸に手を当てて確認して欲しい。生きている価値がないと(一方的に、偏見をもって)みなされたアプリは片っ端から殺されてしまう。リソースを提供し、たとえ画面から見えなくなっても紅茶飲み放題は当たり前、マフィンも食べ放題であるかは電脳世界の中に入ったことがないのでわからない。概要なぜ殺されるのだろう。アプリは1つのプロセス内で動いている。Androidはバックグラウンドにまわったプロセスも保持している。別のアプリ使い始めたっていっても、油断ならないじゃん。戻って使うかもしれないじゃん、キミたちは。メモリが少なくなると、んな悠長なこと言っていられないから、そういうプロセスは終了させてしまう。Killerによる挙動だから詳しくはそれでググって。無差別に殺すわけではなくて、優先順をつけている。このアンドロイド、一応の理性は有るようだ。bindなService他のServiceOthersだいたいこれ。優先順が高いほど、殺されにくい。殺されたプロセスは復元される。Killerに殺されたときだけではない。ランタイムエラーで殺されたプロセスも復元されるんだよ。そのときActivityは1つだけ復元される。殺される前、最後に開いていた画面だ。他のActivityはまだCreateされない。画面を戻ると順々に復元されていく。ActivityはActivity.onCreate()の引数としてActivity.onSavedInstanceState()で保存したデータを取得できる。十分なデータを保存しておくべきだ。めんどくさいから重要なやつだけでいいよ。staticな変数とか。書かれているのを見る。たしかにActivityは殺される。同じアプリを使っている限り、メモリが足りなくなった時に、1つ前のActivityが死んだりはしない。メモリ不足であるActivityが死んだのなら、そのアプリの他のActivityも死んでいる。インテントは「意思」という意味だ、念のため。電話帳のIDが1のデータを編集したい!ってことだろう。こんな感じの「やりたい!」を、あるActivityに渡したり、Android端末中に撒き散らしたりできる。Intentが持つのはaction、dataだけではない。categorytypecomponentextrasこの中で重要なのはextrasだ。基本的には相手に渡したい情報をextrasへ突っ込んでいくことになる。「メールを送りたいんです!」というインテントだったら、extrasにはメールの題名や本文が入っているのだろうね。