Brokenpage 에서 센서 클래스를 사용해서 좌표값들을 인식하고 싶습니다. 헌데 Sensor관련 클래스를 확인할 수가 없네요 ;; 하루종일 찾아봐도 뭐가 문제인지 모르겠습니다. 차라리 에러가 뜨면 좋을텐데 그냥 실행하면 동작하지 않습니다.

 

Brokenpage.java

package com.example.eggfry;

 

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class Brokenpage extends Activity implements OnClickListener{

 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.brokenpage);
  setContentView(new BrokenSensor(this)); // 이부분이 문제입니다.
  
  DisplayMetrics metrics = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(metrics);
    
  ImageButton btn_fry =(ImageButton) findViewById(R.id.imageButton1);
  btn_fry.setOnClickListener(this);
 }
 
 public void onClick(View v){
  switch (v.getId()){
  case R.id.imageButton1:
   Intent frypage = new Intent(this, Frypage.class);
   startActivity(frypage);
   break;
  case R.id.imageButton2:
   //count_broken =count_broken+2;
   break;
  case R.id.imageButton3:
   
   break;
   
  }  
 }//end of onClick()
}//end of class

 

BrokenSensor.java

package com.example.eggfry;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.SurfaceHolder;
import android.view.View;

public class BrokenSensor extends View implements  SensorEventListener {
 //=====전역변수=====
 SensorManager sensorManager;
 int m_x =0;
 int m_y =0; 
 String m_str , m_str1, m_str2 ="";
 String m_width ="";
 
 //=====변수 초기화. 생성자 =====
 public BrokenSensor(Context context){
  super(context);  
  sensorManager =(SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
  sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);
  
 }
 //=====view에 그리는 부분=====
 @SuppressLint("DrawAllocation")
 public void onDraw(Canvas canvas){
  canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), m_x, m_y,null);
  
  //좌표값 표시
  Paint p = new Paint();
  p.setTextSize(20);
  p.setColor(Color.BLACK);
  canvas.drawText(m_str, 40, 180, p);
  canvas.drawText(m_str1,40, 200, p);
  canvas.drawText(m_str2, 40, 220, p);
  canvas.drawText(m_width, 40, 240, p);
  
  canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), 0, 0,null);
  canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), 450, 0,null);
  canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), 0, 660,null);
  canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher), 410, 620,null);
  //left , top , right , bottom
  p.setColor(Color.BLUE);  
  canvas.drawRect (new Rect(0,0,30,30),p);
  p.setColor(Color.RED);
  canvas.drawRect (new Rect(450,0,480,30),p);
  p.setColor(Color.YELLOW);
  canvas.drawRect (new Rect(450,660,480,690),p);
  p.setColor(Color.GREEN);
  canvas.drawRect (new Rect(0,660,30,690),p);
  //480x690
 }
 public void onSensorChanged(SensorEvent event){
  synchronized(this){
   
   switch(event.sensor.getType()){
   case Sensor.TYPE_ORIENTATION:
    float Heading = event.values[0];
    float Pitch = event.values[1];
    float Roll = event.values[2];
    //텍스트 부분
    
    m_str = "Heading[z] : "+ Float.toString(Heading);    
    m_str1 = "Roll[y]"+ Float.toString(Roll);
    m_str2 = "Pitch[x] :"+ Float.toString(Pitch);
    DisplayMetrics metrics = this.getResources().getDisplayMetrics();
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;
    m_width= "width: "+ width + " Height:" +height;
    
    //움직이기
    m_x -=(int)  Roll;//x좌표값
    m_y -=(int) Pitch; //y좌표값
    
    //화면밖고정
    if(m_x<=0)
     m_x=0;
    if(m_y<=0)
     m_y=0;
    if(m_x>= 300)
     m_x = 300;
    if(m_y>= 390)
     m_y = 400;
    break;
   }
  }
  invalidate();
 }
 public void onAccuracyChanged(Sensor arg0, int arg1){
  
 }
 
 //-------surfaceview abstract method
 

 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
  
 }
 public void surfaceCreated(SurfaceHolder holder){
  
  
 }
 public void surfaceDestroyed(SurfaceHolder holder){
  /*
   boolean retry = true;
  
  m_thread.setRunning(false);
  while(retry){
   try{
    m_thread.join();
    retry =false;

   }catch (InterruptedException e){
     
   }//try catch
  */
 }//surfaceDestroyed()
 
}//end of class