2015-01-14 3 views
0

문제점 : 활동이 자동으로로드시 심박동을 검사합니다.
내가 원하는 것 : 버튼을 누른 후 심장 박동을 스캔하기를 원합니다.시작시 자동 스캔 핑거를 비활성화합니다.

임에도 불구하고 아직 새로운 사람이 누구든지 나를 도울 수 있습니까? 나는 그것을 기꺼이 감사 할 것입니다.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main2); 

    preview = (SurfaceView) findViewById(R.id.preview); 
    previewHolder = preview.getHolder(); 
    previewHolder.addCallback(surfaceCallback); 
    previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    image = findViewById(R.id.image); 
    text = (TextView) findViewById(R.id.text); 

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    wakeLock = pm 
      .newWakeLock(PowerManager.FULL_WAKE_LOCK, "DoNotDimScreen"); 
} 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

@Override 
public void onResume() { 
    super.onResume(); 

    wakeLock.acquire(); 

    camera = Camera.open(); 

    startTime = System.currentTimeMillis(); 
} 
@Override 
public void onPause() { 
    super.onPause(); 

    wakeLock.release(); 

    camera.setPreviewCallback(null); 
    camera.stopPreview(); 
    camera.release(); 
    camera = null; 
} 

private static PreviewCallback previewCallback = new PreviewCallback() { 
    @Override 
    public void onPreviewFrame(byte[] data, Camera cam) { 
     if (data == null) 
      throw new NullPointerException(); 
     Camera.Size size = cam.getParameters().getPreviewSize(); 
     if (size == null) 
      throw new NullPointerException(); 

     if (!processing.compareAndSet(false, true)) 
      return; 

     int width = size.width; 
     int height = size.height; 

     int imgAvg = ImageProcessing.decodeYUV420SPtoRedAvg(data.clone(), 
       height, width); 
     // Log.i(TAG, "imgAvg="+imgAvg); 
     if (imgAvg == 0 || imgAvg == 255) { 
      processing.set(false); 
      return; 
     } 

     int averageArrayAvg = 0; 
     int averageArrayCnt = 0; 
     for (int i = 0; i < averageArray.length; i++) { 
      if (averageArray[i] > 0) { 
       averageArrayAvg += averageArray[i]; 
       averageArrayCnt++; 
      } 
     } 

     int rollingAverage = (averageArrayCnt > 0) ? (averageArrayAvg/averageArrayCnt) 
       : 0; 
     TYPE newType = currentType; 
     if (imgAvg < rollingAverage) { 
      newType = TYPE.RED; 
      if (newType != currentType) { 
       beats++; 
       // Log.d(TAG, "BEAT!! beats="+beats); 
      } 
     } else if (imgAvg > rollingAverage) { 
      newType = TYPE.GREEN; 
     } 

     if (averageIndex == averageArraySize) 
      averageIndex = 0; 
     averageArray[averageIndex] = imgAvg; 
     averageIndex++; 

     // Transitioned from one state to another to the same 
     if (newType != currentType) { 
      currentType = newType; 
      image.postInvalidate(); 
     } 

     long endTime = System.currentTimeMillis(); 
     double totalTimeInSecs = (endTime - startTime)/1000d; 
     if (totalTimeInSecs >= 10) { 
      double bps = (beats/totalTimeInSecs); 
      int dpm = (int) (bps * 60d); 
      if (dpm < 30 || dpm > 180) { 
       startTime = System.currentTimeMillis(); 
       beats = 0; 
       processing.set(false); 
       return; 
      } 

      // Log.d(TAG, 
      // "totalTimeInSecs="+totalTimeInSecs+" beats="+beats); 

      if (beatsIndex == beatsArraySize) 
       beatsIndex = 0; 
      beatsArray[beatsIndex] = dpm; 
      beatsIndex++; 

      int beatsArrayAvg = 0; 
      int beatsArrayCnt = 0; 
      for (int i = 0; i < beatsArray.length; i++) { 
       if (beatsArray[i] > 0) { 
        beatsArrayAvg += beatsArray[i]; 
        beatsArrayCnt++; 
       } 
      } 
      int beatsAvg = (beatsArrayAvg/beatsArrayCnt); 
      text.setText(String.valueOf(beatsAvg)); 
      startTime = System.currentTimeMillis(); 
      beats = 0; 
     } 
     processing.set(false); 
    } 
}; 

private static SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() { 
    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     try { 
      camera.setPreviewDisplay(previewHolder); 
      camera.setPreviewCallback(previewCallback); 
     } catch (Throwable t) { 
      Log.e("PreviewDemo-surfaceCallback", 
        "Exception in setPreviewDisplay()", t); 
     } 
    } 
    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
      int height) { 
     Camera.Parameters parameters = camera.getParameters(); 
     parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
     Camera.Size size = getSmallestPreviewSize(width, height, parameters); 
     if (size != null) { 
      parameters.setPreviewSize(size.width, size.height); 
      Log.d(TAG, "Using width=" + size.width + " height=" 
        + size.height); 
     } 
     camera.setParameters(parameters); 
     camera.startPreview(); 
    } 
    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     // Ignore 
    } 
}; 

private static Camera.Size getSmallestPreviewSize(int width, int height, 
     Camera.Parameters parameters) { 
    Camera.Size result = null; 

    for (Camera.Size size : parameters.getSupportedPreviewSizes()) { 
     if (size.width <= width && size.height <= height) { 
      if (result == null) { 
       result = size; 
      } else { 
       int resultArea = result.width * result.height; 
       int newArea = size.width * size.height; 

       if (newArea < resultArea) 
        result = size; 
      } 
     } 
    } 

    return result; 
} 

}

답변

0

나는 당신이 activity로드 버튼을 클릭 할 경우에만 때 당신이 무슨 일을하는지 싶은 이해하면?

그래서 경우 Button을 만들고 onClick()

protected void onCreate(Bundle arg){ 
    ... 

    Button button = (Button)findViewById(R.id.id_of_your_button); 
    button.setOnClickListener(new OnClickListener{ 
     public void onClick(View v){ 
      wakeLock.acquire(); 

      camera = Camera.open(); 

     startTime = System.currentTimeMillis(); 

    } 
    }); 
} 

에 논리를 이동하고 주석에 대한 onResume()

+0

안녕하세요 감사의 코드를 제거합니다. 나는 당신의 코드와 지침을 따라 onResume() 안의 코드를 제거했다. 그러나 그것은 나에게 오류를 준다. logcat에 따르면이 줄은 241입니다. Camera.Parameters parameters = camera.getParameters(); –

+0

업데이트 된 코드를 게시 할 수 있습니까? – vinitius

+0

@AlxMnza 무엇이 오류입니까? 당신은 또한 logcat을 게시 할 수 있습니까? – vinitius

관련 문제