2012-08-09 23 views
5

Arama etkinliğinin devam etmesinden önce PictureCallback'in gerçekleşmesini beklemek istediğiniz bir Android uygulaması yapıyorum.PictureCallback'in gerçekleşmesini beklerken 'Pause' etkinliği

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 

ben ayrılmış diğer mantığı tutmak istiyorum ve böylece ben takePicture fonksiyonunda bu kodlama önlemek istiyoruz.

Bunu yapmak mümkün mü?

+0

Aynısını yapmaya çalışıyorum. İyi soru. –

cevap

0

Arka plan çalışması yaparken UI iş parçacığını engellemek kötü bir uygulamadır.

Yerleşik Kamera etkinliğini çağırırsanız, etkinliğiniz arka planda olur. Fotoğrafı çektikten ve kamera etkinliği kapatıldıktan sonra, etkinliğinize geri döndüğünüzde fotoğraf zaten kaydedilecektir.

Kendi Camera uygulamanızı kullanırsanız, o zaman bir ProgressDialog görüntülemeniz gerekir ve yapmanız gereken herhangi bir arka planınız varsa, bunu ayrı bir iş parçacığında yapmanız gerekir.

+0

Gerçekten de kendi Kamera uygulamamı kullanıyorum. Bir ProgressDialog kullanarak bu sorunu nasıl düzeltebilirim göremiyorum. kod çalıştırıldığında yolu aşağıdaki gibidir: öyle görünüyor böylece 1 3 2 – Gillain

+1

Sorunuzu yanlış: 1) Aşağıdaki sırayla bunu istiyoruz 3) geri arama resmini döndüren bir sonraki mantık yapmak) resmini 2 alır. Fakat daha sonra 2) ayrı bir yöntemle yazabilir ve geri arama işlevinin sonunda bunu çağırabilirsiniz. –

+0

Hızlı yanıtınız için teşekkürler. Öneriniz bir çözüm olabilir, ancak bu kadar çok sorunum olmasının nedeni, kodumu olabildiğince soyut tutmaya çalışmamdır. Projemde bir Etkinliğim ve ayrı bir Kamera sınıfım var. Kamera sınıfındaki TakePicture işlevini arıyorum, daha sonra geri çağırma işlemini beklemek zorunda kalacak ve ardından resmi etkinliğe geri gönderecektir. Sorun, takePicture öğesini çağırdıktan sonra etkinlikteki kodun, geri bildirimin bitmapi dönme şansına sahip olmasından ÖNCE gerçekleştirilmesidir. Tam kodu görmeyi tercih ederseniz söyle. – Gillain

0

İki parçacığı uygulayabilirsiniz. Sonra PictureCallback çağrıldıktan hemen sonra geçerli iş parçacığı üzerinde bekleyin. Sonra PictureCallback bittiğinde, bekleyen iş parçacığının tamamlanmasını tamamlaması için notify() öğesini çağırın. Ama ana parçanızı engellemek istemezsiniz. İsterseniz/ihtiyacınız varsa, ancak iyi bir fikir değil.

+0

PictureCallback'i farklı bir iş parçacığında uygulamayı denedim, ancak bu işe yaramadı. Her nasılsa geri aramalar her zaman ana iş parçacığında çalışır. – Gillain