Note that there are some explanatory texts on larger screens.

plurals
  1. POWhat's wrong with my code for using the camera?
    primarykey
    data
    text
    <p>I'm very new to Android. I'm trying to use the camera with an image overlay. I've seen many threads discussing this topic, but they're still a little over my head. Here's my Activity:</p> <pre><code>package com.commonsware.android.skeleton; import android.app.Activity; import android.content.Context; import android.hardware.Camera; import android.hardware.Camera.Size; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.Window; import android.widget.FrameLayout; import java.io.IOException; import java.util.List; // ---------------------------------------------------------------------- public class SimpleBulbActivity extends Activity { private Preview mPreview; FrameLayout preview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Hide the window title. requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); } protected void onResume() { //Setup the FrameLayout with the Camera Preview Screen mPreview = new Preview(this); preview = (FrameLayout)findViewById(R.id.preview); preview.addView(mPreview); } } // ---------------------------------------------------------------------- class Preview extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder mHolder; Camera mCamera; 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. mCamera = Camera.open(); try { mCamera.setPreviewDisplay(holder); } catch (IOException exception) { mCamera.release(); mCamera = null; // TODO: add more exception handling logic here } } 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. mCamera.stopPreview(); mCamera.release(); mCamera = null; } private Size getOptimalPreviewSize(List&lt;Size&gt; sizes, int w, int h) { final double ASPECT_TOLERANCE = 0.05; double targetRatio = (double) w / h; if (sizes == null) return null; Size optimalSize = null; double minDiff = Double.MAX_VALUE; int targetHeight = h; // Try to find an size match aspect ratio and size for (Size size : sizes) { double ratio = (double) size.width / size.height; if (Math.abs(ratio - targetRatio) &gt; ASPECT_TOLERANCE) continue; if (Math.abs(size.height - targetHeight) &lt; minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } // Cannot find the one match the aspect ratio, ignore the requirement if (optimalSize == null) { minDiff = Double.MAX_VALUE; for (Size size : sizes) { if (Math.abs(size.height - targetHeight) &lt; minDiff) { optimalSize = size; minDiff = Math.abs(size.height - targetHeight); } } } return optimalSize; } 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 = mCamera.getParameters(); List&lt;Size&gt; sizes = parameters.getSupportedPreviewSizes(); Size optimalSize = getOptimalPreviewSize(sizes, w, h); parameters.setPreviewSize(optimalSize.width, optimalSize.height); mCamera.setParameters(parameters); mCamera.startPreview(); } } </code></pre> <p>As you can see, I use the Preview class from the CameraPreview example that can be found in the docs. Here's my layout:</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>So what I'm doing is creating the surface and then trying to add it to the layout inside of the preview FrameLayout. It's not working though. It crashes right away. Help would be awesome!</p> <p>Here is my manifest:</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.commonsware.android.skeleton" android:versionCode="1" android:versionName="1.0"&gt; &lt;uses-sdk android:minSdkVersion="8" /&gt; &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt; &lt;activity android:name=".SimpleBulbActivity" android:label="@string/app_name"&gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; &lt;/activity&gt; &lt;/application&gt; &lt;uses-permission android:name="android.permission.CAMERA" /&gt; &lt;uses-feature android:name="android.hardware.camera" /&gt; &lt;uses-feature android:name="android.hardware.camera.autofocus" /&gt; &lt;/manifest&gt; </code></pre> <p>Apologies, here is the entire logcat. I see two exceptions in there, so maybe that's what's causing it?</p> <pre><code>12-20 16:16:10.843: ERROR/BatteryService(68): usbOnlinePath not found 12-20 16:16:10.843: ERROR/BatteryService(68): batteryVoltagePath not found 12-20 16:16:10.843: ERROR/BatteryService(68): batteryTemperaturePath not found 12-20 16:16:10.883: ERROR/SurfaceFlinger(68): Couldn't open /sys/power/wait_for_fb_sleep or /sys/power/wait_for_fb_wake 12-20 16:16:11.003: ERROR/SensorService(68): couldn't open device for module sensors (Invalid argument) 12-20 16:16:15.923: ERROR/System(68): Failure starting core service 12-20 16:16:15.923: ERROR/System(68): java.lang.SecurityException 12-20 16:16:15.923: ERROR/System(68): at android.os.BinderProxy.transact(Native Method) 12-20 16:16:15.923: ERROR/System(68): at android.os.ServiceManagerProxy.addService(ServiceManagerNative.java:146) 12-20 16:16:15.923: ERROR/System(68): at android.os.ServiceManager.addService(ServiceManager.java:72) 12-20 16:16:15.923: ERROR/System(68): at com.android.server.ServerThread.run(SystemServer.java:206) 12-20 16:16:15.953: ERROR/EventHub(68): could not get driver version for /dev/input/mouse0, Not a typewriter 12-20 16:16:15.953: ERROR/EventHub(68): could not get driver version for /dev/input/mice, Not a typewriter 12-20 16:16:16.564: ERROR/SoundPool(68): error loading /system/media/audio/ui/Effect_Tick.ogg 12-20 16:16:16.564: ERROR/SoundPool(68): error loading /system/media/audio/ui/KeypressStandard.ogg 12-20 16:16:16.564: ERROR/SoundPool(68): error loading /system/media/audio/ui/KeypressSpacebar.ogg 12-20 16:16:16.564: ERROR/SoundPool(68): error loading /system/media/audio/ui/KeypressDelete.ogg 12-20 16:16:16.564: ERROR/SoundPool(68): error loading /system/media/audio/ui/KeypressReturn.ogg 12-20 16:16:16.623: ERROR/UsbObserver(68): java.lang.NullPointerException 12-20 16:16:16.623: ERROR/UsbObserver(68): at com.android.server.UsbObserver.init(UsbObserver.java:131) 12-20 16:16:16.623: ERROR/UsbObserver(68): at com.android.server.UsbObserver.&lt;init&gt;(UsbObserver.java:65) 12-20 16:16:16.623: ERROR/UsbObserver(68): at com.android.server.ServerThread.run(SystemServer.java:402) 12-20 16:16:17.233: ERROR/ThrottleService(68): Could not open GPS configuration file /etc/gps.conf 12-20 16:16:20.224: ERROR/logwrapper(160): executing /system/bin/tc failed: No such file or directory 12-20 16:16:20.324: ERROR/logwrapper(162): executing /system/bin/tc failed: No such file or directory 12-20 16:16:20.394: ERROR/logwrapper(163): executing /system/bin/tc failed: No such file or directory 12-20 16:16:58.542: ERROR/AndroidRuntime(326): FATAL EXCEPTION: main 12-20 16:16:58.542: ERROR/AndroidRuntime(326): java.lang.RuntimeException: Unable to resume activity {com.commonsware.android.skeleton/com.commonsware.android.skeleton.SimpleBulbActivity}: android.app.SuperNotCalledException: Activity {com.commonsware.android.skeleton/com.commonsware.android.skeleton.SimpleBulbActivity} did not call through to super.onResume() 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2095) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2110) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1643) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.os.Handler.dispatchMessage(Handler.java:99) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.os.Looper.loop(Looper.java:123) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.app.ActivityThread.main(ActivityThread.java:3647) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at java.lang.reflect.Method.invokeNative(Native Method) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at java.lang.reflect.Method.invoke(Method.java:507) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at dalvik.system.NativeStart.main(Native Method) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): Caused by: android.app.SuperNotCalledException: Activity {com.commonsware.android.skeleton/com.commonsware.android.skeleton.SimpleBulbActivity} did not call through to super.onResume() 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.app.Activity.performResume(Activity.java:3835) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2085) 12-20 16:16:58.542: ERROR/AndroidRuntime(326): ... 12 more 12-20 16:17:19.592: ERROR/AndroidRuntime(355): FATAL EXCEPTION: main 12-20 16:17:19.592: ERROR/AndroidRuntime(355): java.lang.RuntimeException: Unable to resume activity {com.commonsware.android.skeleton/com.commonsware.android.skeleton.SimpleBulbActivity}: android.app.SuperNotCalledException: Activity {com.commonsware.android.skeleton/com.commonsware.android.skeleton.SimpleBulbActivity} did not call through to super.onResume() 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2095) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2110) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1643) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.os.Handler.dispatchMessage(Handler.java:99) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.os.Looper.loop(Looper.java:123) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.app.ActivityThread.main(ActivityThread.java:3647) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at java.lang.reflect.Method.invokeNative(Native Method) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at java.lang.reflect.Method.invoke(Method.java:507) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at dalvik.system.NativeStart.main(Native Method) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): Caused by: android.app.SuperNotCalledException: Activity {com.commonsware.android.skeleton/com.commonsware.android.skeleton.SimpleBulbActivity} did not call through to super.onResume() 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.app.Activity.performResume(Activity.java:3835) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2085) 12-20 16:17:19.592: ERROR/AndroidRuntime(355): ... 12 more 12-20 16:18:11.932: ERROR/AndroidRuntime(365): FATAL EXCEPTION: main 12-20 16:18:11.932: ERROR/AndroidRuntime(365): java.lang.RuntimeException: Unable to resume activity {com.commonsware.android.skeleton/com.commonsware.android.skeleton.SimpleBulbActivity}: android.app.SuperNotCalledException: Activity {com.commonsware.android.skeleton/com.commonsware.android.skeleton.SimpleBulbActivity} did not call through to super.onResume() 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2095) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2110) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1643) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.os.Handler.dispatchMessage(Handler.java:99) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.os.Looper.loop(Looper.java:123) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.app.ActivityThread.main(ActivityThread.java:3647) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at java.lang.reflect.Method.invokeNative(Native Method) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at java.lang.reflect.Method.invoke(Method.java:507) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at dalvik.system.NativeStart.main(Native Method) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): Caused by: android.app.SuperNotCalledException: Activity {com.commonsware.android.skeleton/com.commonsware.android.skeleton.SimpleBulbActivity} did not call through to super.onResume() 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.app.Activity.performResume(Activity.java:3835) 12-20 16:18:11.932: ERROR/AndroidRuntime(365): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2085) </code></pre>
    singulars
    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.
 

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