john7002 Posté(e) 3 mai 2011 Share Posté(e) 3 mai 2011 Bonjour je teste actuellement l'utilisation d'un appareil photo, voici mon code : public class Test_cam extends Activity implements PictureCallback,ShutterCallback,OnClickListener{ private static final String TAG = "CameraDemo"; Test_cam_preview preview; // This object will create the Camera object and return it to the CameraDemo activity. Button buttonClick; public boolean onProgress = false; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.camera); preview = new Test_cam_preview(this); ((FrameLayout) findViewById(R.id.preview)).addView(preview); buttonClick = (Button) findViewById(R.id.buttonClick); buttonClick.setOnClickListener(this); Log.d(TAG, "onCreate'd"); } public void launch_scanpic(){ Intent intent = new Intent(Test_cam.this,Test_cam_scanpic.class); startActivity(intent); } @Override public void onClick(View v) { if(!onProgress) { onProgress = true; preview.camera.takePicture(Test_cam.this, null, Test_cam.this); //bien mettre null car raw callback renvoit tjrs null! //on lance scanclothe activity } } @Override public void onShutter() { Log.d(getClass().getSimpleName(), "get pic..."); } @Override public void onPictureTaken(byte[] data, Camera camera) { FileOutputStream outStream = null; try { if (data==null) { Log.e(TAG,"data is null !!!!!!!"); } else { // Write to SD Card outStream = new FileOutputStream("/sdcard/test.jpg"); outStream.write(data); Log.e(TAG, "onPictureTaken - wrote bytes: " + data.length); outStream.close(); } } catch (FileNotFoundException e) { Log.e(getClass().getSimpleName(), "Fichier nom Trouvé a l'écriture de L'image",e); e.printStackTrace(); } catch (IOException e) { Log.e(getClass().getSimpleName(), "Erreur à L'enregistrement de l'image",e); e.printStackTrace(); } Log.e(TAG, "onPictureTaken - jpeg"); SystemClock.sleep(2000); onProgress=false; launch_scanpic(); } } launch_scanpic() lance un nouvel intent qui affiche la photo qui vient d'être prise. J'ai bien la preview video obtenu via la caméra. J'ai une instance de boutton qui déclenche la prise de vue et l'enregistre sur la sd. Ca fonctionne de temps en temps et parfois ça plante (freeze de l'overview et ensuite popup signifiant que le programme ne répond plus). Dans le logcat je n'ai aucune info d'erreur. Lorsque tout se passe bienvoici les logs: 05-03 18:22:31.053: INFO/SecCamera(76): int android::SecCamera::endSnapshot() : 05-03 18:22:31.053: INFO/SecCamera(76): munmap():virt. addr 0x41ddb000 size = 4261248 05-03 18:22:31.061: DEBUG/dalvikvm(700): GC_FOR_MALLOC freed 506K, 57% free 2779K/6407K, external 1625K/2137K, paused 15ms 05-03 18:22:31.061: INFO/dalvikvm-heap(700): Grow heap (frag case) to 7.734MB for 1114262-byte allocation 05-03 18:22:31.088: DEBUG/dalvikvm(700): GC_FOR_MALLOC freed 0K, 49% free 3867K/7559K, external 1625K/2137K, paused 13ms 05-03 18:22:31.127: DEBUG/dalvikvm(700): GC_CONCURRENT freed <1K, 49% free 3867K/7559K, external 1625K/2137K, paused 2ms+2ms 05-03 18:22:32.022: ERROR/CameraDemo(700): onPictureTaken - wrote bytes: 1114246 05-03 18:22:32.022: ERROR/CameraDemo(700): onPictureTaken - jpeg J'ai essayé de blinder le code via un timer ou des variables booléenes mais j'ai toujours l'erreur. Quelqu'un aurait une idée? Je n'ai rien trouvé pour m'aider via google. Pour info je teste sur un Google Nexus S. Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.