2012-08-09 18 views
5

我正在構建Android應用程序,我希望在調用活動繼續之前等待PictureCallback發生。在等待PictureCallback發生時「暫停」活動

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

我正在嘗試完全相同。好問題。 – 2013-07-04 14:09:18

回答

0

在做任何後臺工作時阻止UI線程是不好的做法。

如果您調用內置的相機活動,您的活動將在後臺。拍完照片並關閉相機後,當您回到活動狀態時,照片將被保存。

如果您使用自己的Camera實現,那麼你應該顯示一個ProgressDialog,如果你有任何後臺工作要做,你應該在一個單獨的線程。

+0

我確實使用我自己的Camera實現。我看不到如何使用ProgressDialog可以解決這個問題。 執行代碼的方法是如下: 1)拍照 2)做下一個邏輯 3)回調返回圖片 我想它的順序如下:1 3 2 – Gillain 2012-08-09 14:18:33

+1

我誤解你的問題看起來是這樣的。但是,你可以用一個單獨的方法編寫你的2),並在回調函數結束時調用它。 – 2012-08-09 14:19:59

+0

感謝您的快速回復。你的建議可能是一個解決方案,但我遇到這麼多麻煩的原因是因爲我試圖讓我的代碼儘可能抽象。 在我的項目中,我有一個活動和一個分離的相機類。我在Camera類中調用takePicture函數,然後必須等待回調,然後將圖片返回到活動。問題在於,在調用takePicture之後的活動中的代碼會在回調有機會返回位圖之前執行。 告訴我,如果你想看完整的代碼。 – Gillain 2012-08-09 15:40:54

0

你可以在兩個線程中實現它。然後在當前線程上調用PictureCallback之後調用wait()。然後,當PictureCallback完成時,它會調用notify()讓等待的線程知道它完成。但是你不想阻止你的主線程。你可以,如果你想/需要,但它不是一個好主意。

+0

我試圖在不同的線程中實現PictureCallback,但那並沒有解決。不知何故回調總是在主線程中運行。 – Gillain 2012-08-09 14:14:33