Bir sınıf yazdım Bu size yardımcı olabilir. Manifest'inizde dosya kopyası
public class Preview_can_work extends Activity {
private SurfaceView surface_view;
private Camera mCamera;
SurfaceHolder.Callback sh_ob = null;
SurfaceHolder surface_holder = null;
SurfaceHolder.Callback sh_callback = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
surface_view = new SurfaceView(getApplicationContext());
addContentView(surface_view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
if (surface_holder == null) {
surface_holder = surface_view.getHolder();
}
sh_callback = my_callback();
surface_holder.addCallback(sh_callback);
}
SurfaceHolder.Callback my_callback() {
SurfaceHolder.Callback ob1 = new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
mCamera.startPreview();
}
};
return ob1;
}
}
kamera izni için bu kod
<uses-permission android:name="android.permission.CAMERA"/>
Açıklama:
SurfaceView bir SurfaceHolder içeren View türüdür. SurfaceHolder, medyanızı (genellikle çerçeve) gösterebileceğimiz yüzeyi tutar.
mCamera, kamera örneğini içeren bir Camera nesnesidir.
Varsayılan Kamera örneğini tutmak istediğinizde Camera.open();
Fotoğraf Makinesi mCamera = Camera.open();
Artık açık kameranız var veya varsayılan kamera örneğiniz var. Artık kameradan kareleri yakalamanız ve bir yüzeyde görüntülemeniz gerekiyor. Ancak,
yüzeyinden görüntüleyemezsiniz. Burada SurfaceView, surfaceHolder ve surfaceHolder, kamera çerçevelerini görüntülemek için yüzey sağlar. Şimdi yüzey oluşturulacak üç çağrı geri çağırma işlevleri
olarak adlandırılacaktır.
1. public void surfaceCreated(SurfaceHolder holder)
2. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
3. public void surfaceDestroyed(SurfaceHolder holder)
Not: - Uygulamanız duraklamaya devam ederse yüzey yok olacaktır.
surfaceCreated: surfaceCreated sizin yüzey oluşturulur çağrılacak bir geri çağırma işlevidir. Burada kameranızı açabilir ve diğer özellikleri ayarlayabilirsiniz.
surfaceChanged: sizin yüzey oluşturulur, bu en az bir kez çağrılır. Bundan sonra yüzeyiniz değiştiğinde çağrılacaktır (Cihaz rotasyonunda). senin yüzey zaten oluşturduk çünkü Burada
senin önizleme başlatmak
olabilir.
surfaceDestroyed: sizin yüzey yok edecek, bu her zaman çağrılır.Şimdi kameranın çerçevelerini görüntüleyebildiğiniz bir yüzeye sahip değilseniz,
mCamera.release() öğesini kullanarak kamerayı serbest bırakabilirsiniz. Bu çok önemlidir çünkü eğer etkinliğiniz duraksa ve başka herhangi bir etkinlik kamerayı açmaya çalışırsa, zaten açılmış olan
kamerayı açabilirsiniz. Kamera paylaşılan bir kaynaktır, bu yüzden bir kerelik bir uygulama bunu kullanabilir. Bir kamera açtığınız zaman bir şeyi hatırlayın, ardından her zaman bırakın.
stopÖn bakış: Önizleme yapmaya başladığınızda, fotoğraf makineniz çerçevelerinizi yakalamaya ve bir yüzeyde görüntülemeye başlar. Artık yüzeyiniz yok edildiyse, fotoğraf makinesinden
çerçevelerini yakalamayı kesmeniz gerekir, böylece mCamera.stopPreview'i çağırmanız gerekir.
Teşekkürler Bharat, bunu bir def haline getireceğim! Tekrar teşekkürler. Herkes “Emülatörde çalışırken fotoğraf makinesi çalışmıyor” hakkında okuyabileceğim iyi bir makale biliyor mu? Hala doğru mu? – Kitaro
ya aslında emülatör oluştururken kamerayı içine eklemeniz gerekiyorsa o zaman çalışacağını düşünüyorum. Seni anlamaya çalışacağım .. –
Tamam, bu yüzden canlı görüntüyü görmek için kamerayı kullanmak için bir cihaza ihtiyacımız yok mu? Okuduğum makalenin bazılarında emülatörde kamera çalıştırılamayacağımızı söylüyorum ama bunun çözülüp çözülmediğinden emin değilim. Lütfen bana haber ver. Teşekkürler. – Kitaro