コードの基礎としてOpenCV チュートリアル 3 コード (カメラ コントロール) ( OpenCV4Android サンプルonPictureTaken()
を参照) を使用しており、メソッドに保存された画像を開いて操作できるようにする必要があります。操作中に、画像への変更を表示したり、 を使用してメッセージを投稿したりできるようにしたいと考えていますToast
。どちらも、メイン スレッドにいる必要があります。
これまでに受け取ったアドバイスに基づいて、BroadcastReceiver
でActivity
によってトリガーされる でsendBroadcast()
を使用しようとしていJavaCameraView
ます。
Activity
を含むように を更新し、BroadcastReceiver
次のように登録および登録解除しました。
public class Tutorial3Activity extends Activity implements CvCameraViewListener2, OnTouchListener {
:
private ActivityReceiver activityReceiver;
:
@Override
public void onCreate(Bundle savedInstanceState) {
:
IntentFilter intentFilter = new IntentFilter();
this.registerReceiver(activityReceiver, intentFilter);
:
}
:
public void onDestroy() {
:
this.unregisterReceiver(activityReceiver);
:
}
:
private class ActivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "BroadcastReceiver triggered");
if (intent.getAction().equals(Tutorial3View.IMAGE_READY)) {
Log.i(TAG, "BroadcastReceiver received");
}
}
}
}
は次sendBroadcast()
のように呼び出さJavaCameraView
れます。
public class Tutorial3View extends JavaCameraView {
:
public static final String IMAGE_READY = "IMAGE_READY";
private Context context;
:
public Tutorial3View(Context context, AttributeSet attrs) {
:
this.context = context;
:
}
:
public void takePicture(final String fileName) {
PictureCallback callback = new PictureCallback() {
private String mPictureFileName = fileName;
@Override
public void onPictureTaken(byte[] data, Camera camera) {
:
image_read();
:
}
};
mCamera.takePicture(null, null, callback);
}
:
public void image_read() {
Log.i(TAG, "BroadcastReceiver - send");
Intent i = new Intent();
i.setAction(IMAGE_READY);
context.sendBroadcast(i);
Log.i(TAG, "BroadcastReceiver - sent");
}
}
には次のものManifest
が含まBroadcastReceiver
れます。
<receiver android:name="ActivityReceiver">
<intent-filter android:label="IMAGE_READY"></intent-filter>
</receiver>
写真を撮ると、LogCat に次のように表示されます。
03-30 17:22:53.410: I/Sample::Tutorial3View(3174): BroadcastReceiver - send
03-30 17:22:53.410: I/Sample::Tutorial3View(3174): BroadcastReceiver - sent
BroadcastReceiver triggered
しかし、またはのログはありませんBroadcastReceiver received
。
ブロードキャストが受信されない理由を教えてもらえますか?
ありがとう