Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid camera application force close
    primarykey
    data
    text
    <p>I am building a camera application for android, trying to learn how. I have followed a tutorial, but it keeps failing and force closes. Please take a look at my details below:</p> <p>Xml code:</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/layout"&gt; &lt;TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Camera Demo" android:textSize="24sp" /&gt; &lt;FrameLayout android:id="@+id/preview" android:layout_weight="1" android:layout_width="fill_parent" android:layout_height="fill_parent"&gt; &lt;/FrameLayout&gt; &lt;Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonClick" android:text="Click" android:layout_gravity="center"&gt;&lt;/Button&gt; &lt;/LinearLayout&gt; </code></pre> <p>Java code:</p> <pre><code>public class CameraActivity extends Activity { private static final String TAG = "CameraDemo"; Camera camera; Preview preview; Button buttonClick; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.camera_screen); preview = new Preview(this); ((FrameLayout) findViewById(R.id.preview)).addView(preview); buttonClick = (Button) findViewById(R.id.buttonClick); buttonClick.setOnClickListener(new OnClickListener() { public void onClick(View v) { preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback); } }); Log.d(TAG, "onCreate'd"); } ShutterCallback shutterCallback = new ShutterCallback() { public void onShutter() { Log.d(TAG, "onShutter'd"); } }; /** Handles data for raw picture */ PictureCallback rawCallback = new PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { Log.d(TAG, "onPictureTaken - raw"); } }; /** Handles data for jpeg picture */ PictureCallback jpegCallback = new PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) { FileOutputStream outStream = null; try { // write to local sandbox file system // outStream = // CameraDemo.this.openFileOutput(String.format("%d.jpg", // System.currentTimeMillis()), 0); // Or write to sdcard outStream = new FileOutputStream(String.format( "/sdcard/%d.jpg", System.currentTimeMillis())); outStream.write(data); outStream.close(); Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } Log.d(TAG, "onPictureTaken - jpeg"); } }; } </code></pre> <p>Preview.java:</p> <pre><code>class Preview extends SurfaceView implements SurfaceHolder.Callback { private static final String TAG = "Preview"; SurfaceHolder mHolder; public Camera camera; Preview(Context context) { super(context); // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) { // The Surface has been created, acquire the camera and tell it where // to draw. camera = Camera.open(); try { camera.setPreviewDisplay(holder); camera.setPreviewCallback(new PreviewCallback() { public void onPreviewFrame(byte[] data, Camera arg1) { FileOutputStream outStream = null; try { outStream = new FileOutputStream(String.format( "/sdcard/%d.jpg", System.currentTimeMillis())); outStream.write(data); outStream.close(); Log.d(TAG, "onPreviewFrame - wrote bytes: " + data.length); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } Preview.this.invalidate(); } }); } catch (IOException e) { e.printStackTrace(); } } public void surfaceDestroyed(SurfaceHolder holder) { // Surface will be destroyed when we return, so stop the preview. // Because the CameraDevice object is not a shared resource, it's very // important to release it when the activity is paused. camera.stopPreview(); camera = null; } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Now that the size is known, set up the camera parameters and begin // the preview. Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(w, h); camera.setParameters(parameters); camera.startPreview(); } @Override public void draw(Canvas canvas) { super.draw(canvas); Paint p = new Paint(Color.RED); Log.d(TAG, "draw"); canvas.drawText("PREVIEW", canvas.getWidth() / 2, canvas.getHeight() / 2, p); } } </code></pre> <p>Logcat:</p> <pre><code>02-01 19:44:41.825: E/AndroidRuntime(4329): FATAL EXCEPTION: main 02-01 19:44:41.825: E/AndroidRuntime(4329): java.lang.RuntimeException: setParameters failed 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.hardware.Camera.native_setParameters(Native Method) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.hardware.Camera.setParameters(Camera.java:1527) 02-01 19:44:41.825: E/AndroidRuntime(4329): at com.mysoftware.mysoftwareos.mobile.Preview.surfaceChanged(Preview.java:78) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.SurfaceView.updateWindow(SurfaceView.java:554) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.SurfaceView.access$000(SurfaceView.java:81) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:169) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:671) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1848) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1028) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4246) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.Choreographer.doCallbacks(Choreographer.java:555) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.Choreographer.doFrame(Choreographer.java:525) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.os.Handler.handleCallback(Handler.java:615) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.os.Handler.dispatchMessage(Handler.java:92) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.os.Looper.loop(Looper.java:137) 02-01 19:44:41.825: E/AndroidRuntime(4329): at android.app.ActivityThread.main(ActivityThread.java:4765) 02-01 19:44:41.825: E/AndroidRuntime(4329): at java.lang.reflect.Method.invokeNative(Native Method) 02-01 19:44:41.825: E/AndroidRuntime(4329): at java.lang.reflect.Method.invoke(Method.java:511) 02-01 19:44:41.825: E/AndroidRuntime(4329): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 02-01 19:44:41.825: E/AndroidRuntime(4329): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 02-01 19:44:41.825: E/AndroidRuntime(4329): at dalvik.system.NativeStart.main(Native Method) 02-01 19:44:45.455: E/Trace(4386): error opening trace file: No such file or directory (2) 02-01 19:44:45.585: E/PhonePolicy(4386): Could not preload class for phone policy: com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback </code></pre> <p>Please help me and thanks so much!</p>
    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.
    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