###前提・実現したいこと
http://google-os.blog.jp/archives/50816150.html
で公開されている脈拍センシングアプリを起動させたいと思っているのですがうまくいきません。
コンパイルは通るのですが実機でデバッグすると、「問題が発生したため終了します」と起動しません。
コンストラクタはあるはずなんですが下記のようなエラーメッセージが表示されます。
Androidのカメラを使用したアプリに触れてみようと勉強中で基本的なところが抜けているかも…
なんとかこのアプリケーションを起動させるところまで完成させたいのですが現状手詰まりです。
###発生している問題・エラーメッセージ
06-23 00:06:13.256 7276-7276/com.example.taka.wtf D/dalvikvm﹕ Late-enabling CheckJNI 06-23 00:06:13.357 7276-7276/com.example.taka.wtf E/ResourceType﹕ 0x5ace7008: Failed to ResTable::remove() cookie = 0x3, not last table. mHeaders.size() = 4. Warning for spontaneous crashes when the garbage collector runs. 06-23 00:06:13.357 7276-7276/com.example.taka.wtf E/asset﹕ Error removing runtime skin resource (cookie 0x3) 06-23 00:06:13.357 7276-7276/com.example.taka.wtf I/asset﹕ Problem removing all runtime skin resources 06-23 00:06:13.377 7276-7276/com.example.taka.wtf D/dalvikvm﹕ newInstance failed: no <init>() 06-23 00:06:13.377 7276-7276/com.example.taka.wtf D/AndroidRuntime﹕ Shutting down VM 06-23 00:06:13.377 7276-7276/com.example.taka.wtf W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41f478b0) 06-23 00:06:13.377 7276-7276/com.example.taka.wtf E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.taka.wtf/com.example.taka.wtf.MainActivity}: java.lang.InstantiationException: can't instantiate class com.example.taka.wtf.MainActivity; no empty constructor at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2311) at android.app.ActivityThread.access$600(ActivityThread.java:149) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5214) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.InstantiationException: can't instantiate class com.example.taka.wtf.MainActivity; no empty constructor at java.lang.Class.newInstanceImpl(Native Method) at java.lang.Class.newInstance(Class.java:1130) at android.app.Instrumentation.newActivity(Instrumentation.java:1061) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2178) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2311) at android.app.ActivityThread.access$600(ActivityThread.java:149) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5214) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) at dalvik.system.NativeStart.main(Native Method)
###ソースコード
package com.example.taka.wtf; import java.io.IOException; import android.content.Context; import android.hardware.Camera; import android.os.Build; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.PorterDuff.Mode; import android.graphics.SurfaceTexture; public class MainActivity extends SurfaceView implements SurfaceHolder.Callback, Camera.PreviewCallback { private static final int PREVIEW_WIDTH = 640; private static final int PREVIEW_HEIGHT = 480; private static final int FRAME_WIDTH = 50; private static final int SCALE = 20; private static final int VIEW_POINTS = 200; private static final float PEN_WIDTH = 3.0F; private int mBufSize; private float[] mVal; private int mSamples; private int mTop; private int mStep; private Camera mCamera = null; private SurfaceHolder mHolder = null; private SurfaceTexture mSurfaceTexture = null; private Paint mLinePaint = new Paint(); public MainActivity(Context context) { super(context); mLinePaint.setStyle(Style.STROKE); mLinePaint.setColor(Color.GREEN); mLinePaint.setStrokeWidth(PEN_WIDTH); mHolder = getHolder(); mHolder.addCallback(this); } public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub mBufSize = getWidth(); mVal = new float [mBufSize]; mStep = (mBufSize - FRAME_WIDTH*2) / VIEW_POINTS; // カメラオープン mCamera = Camera.open(); try { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { mSurfaceTexture = new SurfaceTexture(0); mCamera.setPreviewTexture(mSurfaceTexture); } else { mCamera.setPreviewDisplay(null); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // TODO Auto-generated method stub stopPreview(); // プレビュー画面のサイズ設定 Camera.Parameters params = mCamera.getParameters(); params.setPreviewSize(PREVIEW_WIDTH, PREVIEW_HEIGHT); params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); mCamera.setParameters(params); // プレビュー開始 mTop = 0; mSamples = 0; startPreview(); } public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub stopPreview(); mCamera.release(); mCamera = null; } @Override public void onPreviewFrame(byte[] data, Camera camera) { // TODO Auto-generated method stub mVal[mSamples%mBufSize] = calcLuminance(data); mSamples++; drawLuminance(); } // プレビュー開始 private void startPreview(){ mCamera.setPreviewCallback(this); mCamera.startPreview(); } // プレビュー停止 private void stopPreview(){ mCamera.setPreviewCallback(null); mCamera.stopPreview(); } // 輝度値の計算 private float calcLuminance(byte[] data) { float sumVal = 0.0f; int cnt = 0; for (int y=PREVIEW_HEIGHT/4; y<PREVIEW_HEIGHT*3/4; y++) { for (int x=PREVIEW_WIDTH/4; x<PREVIEW_WIDTH*3/4; x++) { sumVal += (float)(data[y*PREVIEW_WIDTH+x] & 0xff); cnt++; } } sumVal /= cnt; return sumVal; } private void drawLuminance() { int idx, idx_1; Canvas canvas = mHolder.lockCanvas(); if (canvas != null) { canvas.drawColor(0, Mode.CLEAR); if (mSamples >= VIEW_POINTS) { mTop++; } for (int i=mTop, x=0; i<mSamples-1; i++, x++) { idx = i % mBufSize; idx_1 = (i+1) % mBufSize; canvas.drawLine(x*mStep+FRAME_WIDTH, (mVal[idx]-80)*SCALE, (x+1)*mStep+FRAME_WIDTH, (mVal[idx_1]-80)*SCALE, mLinePaint); } mHolder.unlockCanvasAndPost(canvas); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/23 00:36
2016/06/23 03:25