Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid - Front Camera Preview SurfaceView
    primarykey
    data
    text
    <p>I'm using the code below to show the front_camera inside a <code>surfaceView</code>, but when I try this code on a <strong>Samsung Galaxy S plus</strong>, all the screen is black, but no errors occur. Does anyone know why it happens?</p> <pre><code>public class TestLedActivity extends Activity { private SurfaceView preview=null; private SurfaceHolder previewHolder=null; private Camera camera=null; private boolean inPreview=false; private int id; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion &gt; android.os.Build.VERSION_CODES.FROYO){ id=findFrontFacingCamera(); Log.d("TestLedActivity","L'id trovato e': "+id); camera = Camera.open(id); } else{ Log.d("TestLedActivity","La versione e' froyo"); camera = Camera.open(); } preview=(SurfaceView)findViewById(R.id.cpPreview); // TODO Auto-generated method stub previewHolder=preview.getHolder(); previewHolder.addCallback(surfaceCallback); previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } @Override public void onResume() { super.onResume(); } @Override public void onPause() { if (inPreview) { camera.stopPreview(); } camera.release(); camera=null; inPreview=false; super.onPause(); } private int findFrontFacingCamera() { int idCamera=0; // Look for front-facing camera, using the Gingerbread API. // Java reflection is used for backwards compatibility with pre-Gingerbread APIs. try { Class&lt;?&gt; cameraClass = Class.forName("android.hardware.Camera"); Object cameraInfo = null; Field field = null; int cameraCount = 0; Method getNumberOfCamerasMethod = cameraClass.getMethod( "getNumberOfCameras" ); if ( getNumberOfCamerasMethod != null ) { cameraCount = (Integer) getNumberOfCamerasMethod.invoke( null, (Object[]) null ); } Class&lt;?&gt; cameraInfoClass = Class.forName("android.hardware.Camera$CameraInfo"); if ( cameraInfoClass != null ) { cameraInfo = cameraInfoClass.newInstance(); } if ( cameraInfo != null ) { field = cameraInfo.getClass().getField( "facing" ); } Method getCameraInfoMethod = cameraClass.getMethod( "getCameraInfo", Integer.TYPE, cameraInfoClass ); if ( getCameraInfoMethod != null &amp;&amp; cameraInfoClass != null &amp;&amp; field != null ) { for ( int camIdx = 0; camIdx &lt; cameraCount; camIdx++ ) { getCameraInfoMethod.invoke( null, camIdx, cameraInfo ); int facing = field.getInt( cameraInfo ); if ( facing == 1 ) { // Camera.CameraInfo.CAMERA_FACING_FRONT try { Method cameraOpenMethod = cameraClass.getMethod( "open", Integer.TYPE ); if ( cameraOpenMethod != null ) { Log.d("TestLedActivity","Id frontale trovato: "+camIdx); //camera = (Camera) cameraOpenMethod.invoke( null, camIdx ); idCamera=camIdx; } } catch (RuntimeException e) { Log.e("TestLedActivity", "Camera failed to open: " + e.getLocalizedMessage()); } } } } } // Ignore the bevy of checked exceptions the Java Reflection API throws - if it fails, who cares. catch ( ClassNotFoundException e ) {Log.e("TestLedActivity", "ClassNotFoundException" + e.getLocalizedMessage());} catch ( NoSuchMethodException e ) {Log.e("TestLedActivity", "NoSuchMethodException" + e.getLocalizedMessage());} catch ( NoSuchFieldException e ) {Log.e("TestLedActivity", "NoSuchFieldException" + e.getLocalizedMessage());} catch ( IllegalAccessException e ) {Log.e("TestLedActivity", "IllegalAccessException" + e.getLocalizedMessage());} catch ( InvocationTargetException e ) {Log.e("TestLedActivity", "InvocationTargetException" + e.getLocalizedMessage());} catch ( InstantiationException e ) {Log.e("TestLedActivity", "InstantiationException" + e.getLocalizedMessage());} catch ( SecurityException e ) {Log.e("TestLedActivity", "SecurityException" + e.getLocalizedMessage());} if ( camera == null ) { Log.d("TestLedActivity","Devo aprire la camera dietro"); // Try using the pre-Gingerbread APIs to open the camera. idCamera=0; } return idCamera; } private Camera.Size getBestPreviewSize(int width, int height, Camera.Parameters parameters) { Camera.Size result=null; for (Camera.Size size : parameters.getSupportedPreviewSizes()) { if (size.width&lt;=width &amp;&amp; size.height&lt;=height) { if (result==null) { result=size; } else { int resultArea=result.width*result.height; int newArea=size.width*size.height; if (newArea&gt;resultArea) { result=size; } } } } return(result); } SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() { public void surfaceCreated(SurfaceHolder holder) { try { camera.setPreviewDisplay(previewHolder); } catch (Throwable t) { Log.e("PreviewDemo-surfaceCallback", "Exception in setPreviewDisplay()", t); Toast .makeText(TestLedActivity.this, t.getMessage(), Toast.LENGTH_LONG) .show(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Camera.Parameters parameters=camera.getParameters(); Camera.Size size=getBestPreviewSize(width, height, parameters); if (size!=null) { //parameters.set("camera-id", 0); parameters.setPreviewSize(size.width, size.height); camera.setParameters(parameters); camera.startPreview(); inPreview=true; } } public void surfaceDestroyed(SurfaceHolder holder) { // no-op } }; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload