2012-08-09 4 views
5

私はPictureCallbackが呼び出されるアクティビティが続行される前に発生するのを待っているAndroidアプリを構築しています。PictureCallbackが発生するのを待っている間に 'Pause'アクティビティ

import android.hardware.Camera; 

private Camera camera 
private Bitmap picture; 

camera.takePicture(null, null, new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 1; 
    picture = BitmapFactory.decodeByteArray(data , 0, data.length, options); 
    } 
} 

... do some other logic with picture 

私は別のロジックを分離しておきたいので、takePicture関数でこれをコーディングしないようにしたいと思います。

これは可能ですか?

+0

私は全く同じことをしようとしています。良い質問。 –

答えて

0

バックグラウンド処理中にUIスレッドをブロックするのは悪い習慣です。

カメラの組み込みアクティビティを呼び出すと、アクティビティはバックグラウンドになります。あなたが写真を撮ってカメラのアクティビティが終了すると、あなたのアクティビティに戻るまでに、その写真はすでに保存されます。

Cameraの実装を使用する場合は、ProgressDialogと表示する必要があります。バックグラウンド作業がある場合は、別のスレッドで行う必要があります。

+0

私は実際に自分のカメラ実装を使用しています。 ProgressDialogを使用してこの問題を解決する方法がわかりません。コードが実行される 方法は以下の通りである:それはそうなるよう1 3 2 – Gillain

+1

私はあなたの質問を誤解: 1)私は、次の順序でそれをしたいと思い 3)コールバックは絵 を返し、次のロジックを行う)絵 2を取ります。しかし、あなたは別の方法であなたの2)を書くことができ、コールバック関数の最後でそれを呼び出すことができます。 –

+0

あなたの迅速な対応に感謝します。あなたの提案は解決策になる可能性がありますが、私が非常に問題を抱えている理由は、私のコードをできるだけ抽象的に保つためです。 私のプロジェクトでは、アクティビティとカメラクラスを分離しています。私はカメラクラスのtakePicture関数を呼び出しています。この関数は、コールバックを待たなければならず、その後に画像をアクティビティに返します。問題は、コールバックがビットマップを返す前に、takePictureを呼び出すアクティビティAFTER内のコードが実行されることです。 完全なコードを表示したい場合は教えてください。 – Gillain

0

2つのスレッドで実装できます。次に、PictureCallbackの直後に、現在のスレッドでwait()を呼び出します。それから、PictureCallbackが終了したら、wait()を呼び出すためにnotify()を呼び出さなければなりません。しかし、あなたはメインスレッドをブロックしたくありません。もしあなたが望む/必要があることもできますが、それは良い考えではありません。

+0

PictureCallbackを別のスレッドで実装しようとしましたが、うまくいきませんでした。何らかの形でコールバックは常にメインスレッドで実行されます。 – Gillain

関連する問題