0

コードの基礎としてOpenCV チュートリアル 3 コード (カメラ コントロール) ( OpenCV4Android サンプルonPictureTaken()を参照) を使用しており、メソッドに保存された画像を開いて操作できるようにする必要があります。操作中に、画像への変更を表示したり、 を使用してメッセージを投稿したりできるようにしたいと考えていますToast。どちらも、メイン スレッドにいる必要があります。

これまでに受け取ったアドバイスに基づいて、BroadcastReceiverActivityによってトリガーされる で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

ブロードキャストが受信されない理由を教えてもらえますか?

ありがとう

4

2 に答える 2

1

runOnUiThread()メソッドを呼び出す必要があります。

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // stuff to be done on UI Thread
    }
});
于 2013-03-30T12:04:51.637 に答える