10일동안 이것저것 계속 해보다가 안되서 이렇게 글을 올립니다.
제가 스마트폰의 블루투스 통신으로 제어하는 것을 만드는 중입니다.
현제 블루투스 통신 성공하고, 다른 버튼 제어도 다 성공했는데 기울기로 제어하는 부분이 안됩니다.
 
HydraTank.java   DeviceListActivity.java  TankConService.java
   매인 activity       블루투스 연결부분         블로투스 패킷 전송
 
대략 이렇게 짜여 있습니다. 여기서 기울기값에 따라 패킷을 전송하려고 매인 activity 에서 SensorEventListener을 해보았지만 오류만 나서 sensorActivity.java(SensorExampleView로 화면전환)   SensorExampleView.java( View SensorEventListener를 이용해 기울기 Heading, Pitch, Roll 값 보여주는것과 아이콘 X, Y좌표 이동 하는것을 나타냅니다. )
 
이렇게 총 5개의 java로 이루어져 있습니다. 매인 activity 에서 기울기 버튼을 클릭시 SensorExampleView.java 화면이 나오게 했습니다.
그래서 기울기(Pitch, Roll) 값에 따라서 블루투스로 패킷을 전송 하려고 하는데 아무런 변화가 없거나 에러만 납니다.
여기서 에러는 코딩상 문제는 없는데 실제 기기에서 작동시켜 보면 다시실행하라는 창이 뜨면서 꺼져버립니다. 

 

SensorExampleView.java 소스 입니다. 
 
 package com.hydratank;

import android.content.Context;
public  class SensorExampleView extends View implements SensorEventListener {
 //private static final int Pitch=0;
 SensorManager m_sensorManager; // 센서를 사용하려면 필요한 센서매니져
 String m_str = ""; // 센서 정보를 표시하기위한 스트링변수
 String m_str2 = "";
 // 센서에따라 움직일 아이콘의 좌표
 int m_x = 0;
 int m_y= 0;
    int a;
    private TankConService mTankConService = null;
    private HydraTank asas = null;
    private sensorActivity msensorActivity = null;
 public SensorExampleView(Context context) {
  super(context);
  // 센서매니져를 받아온뒤 리스너로 SensorEventListner 를 상속받은 자신을 등록한다.
  m_sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
  m_sensorManager.registerListener(this, m_sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);
 }
 @Override
 protected void onDraw(Canvas canvas) {
  // 아이콘을 그려준다.
  canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.icon), m_x,m_y,null);
  // 방향센서값을 화면에 표시한다.
   Paint p = new Paint();
      p.setTextSize(20);     // 글자크기를 20으로 지정한다.
      p.setColor(Color.WHITE); // 글자색을 흰색으로 지정한다.
   canvas.drawText(m_str, 0, 20, p);
   canvas.drawText(m_str2, 0, 40, p);
 }
 float Pitch;
 public void onSensorChanged(SensorEvent event){
  synchronized (this) {
   switch (event.sensor.getType()){
   // 방향센서값의 경우
   case Sensor.TYPE_ORIENTATION:
    float Heading = event.values[0];
    Pitch = (int)event.values[1];
    float Roll = (int) event.values[2];
    a = (int)event.values[1];
    
    // 텍스트 값 갱신
    m_str = "Orientation :";
    m_str +="Heading:"+ Float.toString(Heading);
    m_str2 = "Pitch:"+Float.toString(Pitch);
    m_str2 +=" Roll:"+Float.toString(Roll);
    // 아이콘움직이기
    m_x -= Roll;
    m_y -= Pitch;
    
    // 아이콘이 화면밖못빠져나가게 고정한다
    if(m_x <= 70)
     m_x  = 70;
    if(m_y <= 70)
     m_y  = 70;
    if(m_x >= 350)
     m_x  = 350;
    if(m_y >= 350)
     m_y  = 350;
    break;
   }
  }
  // 화면을 갱신한다.
  invalidate();
  // 기울기 값에 따른 전송
  if(a < -10) {
   //mTankConService.toque1(1, 1);
   //asas.sendToque(1,1);
      //try {
   //   Thread.sleep(1000);
      //} catch (InterruptedException e) {
   // TODO Auto-generated catch block
   //e.printStackTrace();
      //}
   //Object sleep = 1000;
     }

 }
 @Override
 public void onAccuracyChanged(Sensor arg0, int arg1) {
  // 센서 정확도
 }
 
 //public void sendToque(int left, int right) {
  //mTankConService.toque1(left, right);
  //asas.sendToque(left, right);
  //}
}
 
위 소스에서 녹색 부분에서 기울기 -10을 넘어가면 TankConService.java의 toque(left, right) 부분에
값이 넘어가서 블루투스로 패킷 전송을 하고 싶습니다.
아니면  HydraTank.java의 sendToque(left, right) 부분에 값이 넘어가게 하고 싶습니다. 
 
 
TankConService.java 의 소스 부분입니다.
 
 
public void toque(int left, int right) {
        // Create temporary object
        ConnectedThread r;
        // Synchronize a copy of the ConnectedThread
        synchronized (this) {
            if (mState != STATE_CONNECTED) return;
            r = mConnectedThread;
        }
        // Perform the write unsynchronized
        r.toque(left, right);
    }
 
public void toque(int left, int right) {
         try {
          
          String data = "#M";
          if(1 == left && 1 == right) data = "#P";
          else if(2 == left && 2 == right) data = "#P";
          else if(3 == left && 3 == right) data = "#P";
          
          if(4 == left && 4 == right) data = "#T";
          else if(5 == left && 5 == right) data = "#T";
          
          if (165 == left) data += 'F';
          else if (-165 == left) {data += 'B'; }
          else if (1 == left) data += 'L';
          else if (2 == left) data += 'R';
          else if (3 == left) data += 'S';
          else if (4 == left) data += 'O';
             else if (5 == left) data += 'X';
          else if (10 == left) data +='H';
          else if (6 == left) data += 'U';
          else if (7 == left) data += 'U';
          else if (8 == left) data += 'D';
          else if (9 == left) data += 'D';
          
          if (165 == right) data += 'F';
          else if (-165 == right) {data += 'B'; }
          else if (1 == right) data += 'L';
          else if (2 == right) data += 'R';
          else if (3 == right) data += 'S';
          else if (4 == right) data += 'O';
          else if (5 == right) data += 'X';
          else if (10 == right) data +='H';
          else if (6 == right) data += 'L';
          else if (7 == right) data += 'R';
          else if (8 == right) data += 'L';
          else if (9 == right) data += 'R';
          
          //if (left == 165) data += (char)(left&0xbe);
          //else if (left == -165) data += (char)(left&0xbe);
          //if (right == 165) data += (char)(right&0xbe);
          //else if (right == -165) data += (char)(right&0xbe);
          mmOutStream.write(data.getBytes());
         } catch (IOException e) {
                Log.e(TAG, "Exception during write", e);
            }
        }  

 
계속 이것저것 코스를 수정해보고 해도 안되서 이렇게 글을 올립니다.
좋은 답변 부탁 드립니다.  공지사항 읽었습니다.