Ich brauche eine Hilfe. Ich versuche Individuelle Kamera mit Oberfläche zu implementieren vie, aber ich bin in diesen Fehler gestapelt:Android ... Verbindung mit Kamera-Service nicht möglich
Process: visionary.anselmo.camerademo, PID: 7464
java.lang.RuntimeException: Fail to connect to camera service
at android.hardware.Camera.<init>(Camera.java:496)
at android.hardware.Camera.open(Camera.java:360)
at visionary.anselmo.camerademo.CameraActivity.surfaceCreated(CameraActivity.java:149)
at android.view.SurfaceView.updateWindow(SurfaceView.java:608)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:160)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2201)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
at android.view.Choreographer.doCallbacks(Choreographer.java:683)
at android.view.Choreographer.doFrame(Choreographer.java:619)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Und hier geht die Aktivität, die diese Griffe: public class CameraActivity erweitert AppCompatActivity implementiert SurfaceHolder.Callback {
@SuppressWarnings("deprecation")
private Camera camera;
@InjectView(R.id.surface_view)
SurfaceView surfaceView;
@InjectView(R.id.btn_take_picture)
ImageView take_picture;
SurfaceHolder surfaceHolder;
@SuppressWarnings("deprecation")
Camera.PictureCallback pictureCallback;
@SuppressWarnings("deprecation")
ShutterCallback shutterCallback;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camera_activity);
ButterKnife.inject(this);
surfaceHolder = surfaceView.getHolder();
// Install the surfaceHolder.Callback so we get notified when the underlying is created and destroyed
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
take_picture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cameraImage();
}
});
pictureCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outputStream;
File imageFile = getDirectory();
if (!imageFile.exists() && !imageFile.mkdirs()) {
Toast.makeText(getApplicationContext(),
"Nao foi possivel criar o directorio para a imagem.",
Toast.LENGTH_SHORT)
.show();
return;
}
SimpleDateFormat format = new SimpleDateFormat("yyyymmddhhmmss", Locale.ENGLISH);
String date = format.format(new Date());
String photoFile = "Demo" + date + ".jpg";
String fileName = imageFile.getAbsolutePath() + "/" + photoFile;
File picFile = new File(fileName);
try {
outputStream = new FileOutputStream(picFile);
outputStream.write(data);
outputStream.close();
} catch (IOException ignored) {
}
Toast.makeText(getApplicationContext(), "Picture Saved", Toast.LENGTH_SHORT)
.show();
refreshCamera();
refreshGallery(picFile);
}
};
}
private void refreshGallery(File file) {
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(file));
sendBroadcast(intent);
}
private void refreshCamera() {
if (surfaceHolder.getSurface() == null) {
// Preview surfave does not exists
return;
}
// Stop the preview before making changes
try {
camera.stopPreview();
} catch (Exception ignored) {
}
// Set the preview size, and make any resize, rotate or any reformmating changes here
// Start preview with new Settings
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
} catch (Exception ignored) {
}
}
private File getDirectory() {
File dics = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
return new File(dics, "CameraActivity");
}
private void cameraImage() {
// Take the picture
camera.takePicture(null, null, pictureCallback);
}
@SuppressWarnings("deprecation")
@Override
public void surfaceCreated(SurfaceHolder holder) {
// Open the fuck'n Camera here
releaseCamera();
camera = Camera.open();
Camera.Parameters parameters;
parameters = camera.getParameters();
// Modify the parameters
parameters.setPreviewFrameRate(20);
parameters.setPreviewSize(352, 288);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
try {
// The surface has been created, now tell the camera where to draw the preview
camera.setPreviewDisplay(surfaceHolder);
} catch (Exception ignored) {
}
}
private void releaseCamera(){
if(camera != null){
camera.release();
camera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
refreshCamera();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// Stop the preview and release the camera
camera.stopPreview();
camera.release();
camera = null;
}
}
Hilfe Jungs ... Dank ...
Häufig bedeutet dies, dass eine andere App die Kamera verwendet. Dies kann passieren, wenn Ihre App die Kamera öffnet, aber nicht ordnungsgemäß schließt. Versuchen Sie, Ihr Gerät neu zu starten, und prüfen Sie, ob das Problem behoben ist. – CommonsWare
@CommonsWare ... Ich benutze den Android Studio Emulator, und ich habe das Gerät ausgeschaltet und neu gestartet, aber die App immer noch verknallt ... –
irgendwelche Ideen, wie kann ich das lösen? –