D
Daaaaniel
App-Anbieter (kostenlos)
- 3
Hallo,
ich entwickle im Moment eine App, die selbstständig Bilder mit der Kamera aufnimmt und speichert.
Ich habe das Problem, dass die App auf meinem Galaxy S2 mit Cyanogenmod (Android 4.2.2) sofort abstürzt, wenn ich auf die Kamera zugreifen möchte.
Auf meinem Note 3 mit Android 4.3 dagegen funktioniert alles problemlos. Deshalb bin ich im Moment etwas ratlos, woran es liegen könnte.
Hier der Programmcode:
Hier der Fehler aus der Logcat:
05-01 19:54:40.862: E/AndroidRuntime(5029): FATAL EXCEPTION: Thread-222
05-01 19:54:40.862: E/AndroidRuntime(5029): java.lang.RuntimeException: autoFocus failed
05-01 19:54:40.862: E/AndroidRuntime(5029): at android.hardware.Camera.native_autoFocus(Native Method)
05-01 19:54:40.862: E/AndroidRuntime(5029): at android.hardware.Camera.autoFocus(Camera.java:931)
05-01 19:54:40.862: E/AndroidRuntime(5029): at de.daniel17903.mycamera.TakePictureThread2.takePicture(TakePictureThread2.java:70)
05-01 19:54:40.862: E/AndroidRuntime(5029): at de.daniel17903.mycamera.TakePictureThread2.run(TakePictureThread2.java:30)
05-01 19:54:40.862: E/AndroidRuntime(5029): at java.lang.Thread.run(Thread.java:856)
Die App stürzt ab, sobald ich den autofocus verwenden möchte. Wenn ich es ohne autofoucs probiere stürzt es ab, wenn ich das Bild machen möchte. Das Problem liegt anscheinend irgendwie an der Kamera.
Hat jemand eine Idee was ich noch ausprobieren könnte?
ich entwickle im Moment eine App, die selbstständig Bilder mit der Kamera aufnimmt und speichert.
Ich habe das Problem, dass die App auf meinem Galaxy S2 mit Cyanogenmod (Android 4.2.2) sofort abstürzt, wenn ich auf die Kamera zugreifen möchte.
Auf meinem Note 3 mit Android 4.3 dagegen funktioniert alles problemlos. Deshalb bin ich im Moment etwas ratlos, woran es liegen könnte.
Hier der Programmcode:
Code:
public class TakePictureThread2 implements Runnable {
private Context mycontext;
private ServerThread2 serverThread;
private final Matrix matrix = new Matrix();
private boolean readyForNewPicture = true;
public TakePictureThread2(Context activity, ServerThread2 serverThread) {
this.mycontext = activity;
this.serverThread = serverThread;
matrix.postRotate(90);
}
public void run() {
while(true){
do{
sleep(1000);
}while(!readyForNewPicture);
takePicture();
}
}
private void takePicture() {
readyForNewPicture = false;
final Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera c) {
if (data != null) {
CameraHelper.camera.startPreview();
// Bild dekodieren
//Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
//bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
// Datum als Bildname setzen und speichern
final String imageFileName = "JPEG_" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + "_.jpg";
UtilsSD.saveBitmapToSD(mycontext, BitmapFactory.decodeByteArray(data, 0, data.length), imageFileName);
// Dateinamen an ServerThread übergeben
serverThread.setPicture(imageFileName);
readyForNewPicture = true;
}
}
};
// Abfrage nötig, sonst NullPointerException
// do {
// System.out.println("Fehler: Kamera nicht gefunden!");
// sleep(1000);
// }while (CameraHelper.camera == null);
// Bild machen
CameraHelper.camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean arg0, Camera arg1) {
CameraHelper.camera.takePicture(null, null, mPictureCallback);
System.out.println("new picture taken!");
}
});
}
public void stop(){
if(CameraHelper.camera != null){
CameraHelper.camera.stopPreview();
CameraHelper.camera.release();
}
}
private void sleep(int s){
try {
Thread.sleep(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Code:
public class UtilsSD {
final static String SAVE_PATH = Environment.getExternalStorageDirectory() + "/DCIM/Pictures";
static boolean isSDCardPrepared() {
String state = android.os.Environment.getExternalStorageState();
if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) return false; else return true;
}
public static void saveBitmapToSD(Context mycontext, Bitmap bmp, String filename) {
if (isSDCardPrepared()) {
File directory = new File(SAVE_PATH);
directory.mkdirs();
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
File f = new File(SAVE_PATH+File.separator+filename);
try {
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
fo.flush();
fo.close();
} catch (Exception ex) {
Log.e("ex saveBitmapToSD", ex+"");
}
try {
bytes.close();
} catch (IOException e) {
e.printStackTrace();
}
bmp.recycle();
bmp = null;
System.gc();
} else {
System.out.println("Saving Bitmap Failed: SDCard not prepared!");
}
}
public static InputStream loadBitmapFromSD(Context mycontext, String filename) {
if (isSDCardPrepared()) {
File f = new File(SAVE_PATH+File.separator+filename);
try {
if (f.exists()) return new FileInputStream(f);
} catch (Exception ex) {
Log.e("ex loadBitmapFromSD", ex+"");
}
} else {
System.out.println("Loading Bitmap Failed: SDCard not prepared!");
}
return null;
}
public static boolean isBitmapExistOnSD(String filename) {
return new File(SAVE_PATH+File.separator+filename).exists();
}
public static String getBitmapPath(String filename) {
return SAVE_PATH+File.separator+filename;
}
}
Hier der Fehler aus der Logcat:
05-01 19:54:40.862: E/AndroidRuntime(5029): FATAL EXCEPTION: Thread-222
05-01 19:54:40.862: E/AndroidRuntime(5029): java.lang.RuntimeException: autoFocus failed
05-01 19:54:40.862: E/AndroidRuntime(5029): at android.hardware.Camera.native_autoFocus(Native Method)
05-01 19:54:40.862: E/AndroidRuntime(5029): at android.hardware.Camera.autoFocus(Camera.java:931)
05-01 19:54:40.862: E/AndroidRuntime(5029): at de.daniel17903.mycamera.TakePictureThread2.takePicture(TakePictureThread2.java:70)
05-01 19:54:40.862: E/AndroidRuntime(5029): at de.daniel17903.mycamera.TakePictureThread2.run(TakePictureThread2.java:30)
05-01 19:54:40.862: E/AndroidRuntime(5029): at java.lang.Thread.run(Thread.java:856)
Die App stürzt ab, sobald ich den autofocus verwenden möchte. Wenn ich es ohne autofoucs probiere stürzt es ab, wenn ich das Bild machen möchte. Das Problem liegt anscheinend irgendwie an der Kamera.
Hat jemand eine Idee was ich noch ausprobieren könnte?
Zuletzt bearbeitet: