2013-01-04 3 views
0

Android가 처음인데 실수로 어딘가에서 실수를 저지르고 수정할 수 없다고 생각됩니다. 나는 주 활동 (Main Activity)을 가지고 있는데, 주 ​​(Main) 메뉴라고 부른다. 이것으로부터 나는 원하는 활동을 시작하기 위해 적절한 버튼을 눌러 다른 활동을 시작합니다. 문제는 내가 시작한 활동 중 하나에서 onSensorchanged()를 사용하는 것입니다. 응용 프로그램을 처음 시작한 경우 시작된 활동 값은 예상대로 작동하지만, 활동을 닫으면 (다시 말해서 기본 메뉴로 돌아 왔음) onSensorchanged()에서 읽은 값을 다시 시작하면, 점프. 올바른 값은 잘못된 값과 결합됩니다. 나는 두 번째 활동을 시작하고 그 문제가 이것과 관련 있다고 생각하는 의도를 사용합니다.onSensorChanged Azimut 값 바로 가기

메인 메뉴 코드 : OnSensorChanged에 대한

public class MainMenuActivity extends Activity{ 

Button gps_btn,lineFollow_btn,man_control_btn; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_menu); 
    addListenerOnButton(); 
    Debug.startMethodTracing("Navigation Trace"); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main_menu, menu); 
    return true; 
} 

@Override 
protected void onPause() 
{ 


    super.onPause(); 
    Debug.stopMethodTracing(); 

} 

public void addListenerOnButton() 
{ 

    final Context context = this; 

    gps_btn = (Button) findViewById(R.id.GPS_btn); 

    gps_btn.setOnClickListener(new OnClickListener() 
    { 

     public void onClick(View arg0) 
     { 

      Intent intent = new Intent(context, AutoControl.class); 
         startActivity(intent); 

     } 

    }); 

    lineFollow_btn = (Button) findViewById(R.id.line_follower_btn); 

    lineFollow_btn.setOnClickListener(new OnClickListener() 
    { 

     public void onClick(View arg0) 
     { 

      Intent intent2 = new Intent(context, CamDemoActivity.class); 
         startActivity(intent2); 

     } 

    }); 

    man_control_btn = (Button) findViewById(R.id.man_ctrl_btn); 

    man_control_btn.setOnClickListener(new OnClickListener() 
    { 

     public void onClick(View arg0) 
     { 

      Intent intent2 = new Intent(context, ManualAct_PLC.class); 
         startActivity(intent2); 

     } 

    }); 

} 

코드 다음 AutoControl 활동이 다시 시작되면 기록 된 값을보기

public void onSensorChanged(SensorEvent event) 
{ 
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) 
     gravity = event.values; 
    if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) 
     geoMagnetic = event.values; 
    if (gravity != null && geoMagnetic != null) 
    { 
     float R[] = new float[9]; 
     float I[] = new float[9]; 
     boolean success = SensorManager.getRotationMatrix(R, I, gravity,geoMagnetic); 

     if (success) 
     { 
      /* Orientation has azimuth, pitch and roll */ 
      float orientation[] = new float[3]; 
      SensorManager.getOrientation(R, orientation); 
      float azimut = orientation[0]; 
      updateSensorInfoView(azimut);   
      steerRobot(azimut); 
      System.out.println("Raw Sensor value:" + Double.toString(Math.toDegrees(azimut))); 
      System.out.println("Degree Sensor value:" + calculations.compassDegString(azimut)); 
     } 
    } 

} 

내 센서 데이터는 예기치 않은 :

01-04 17:52:34.925: I/System.out(31387): Calculatebearing value:2.168326647225342 
    01-04 17:52:34.925: I/System.out(31387): Raw Sensor value:-116.11590698474976 
    01-04 17:52:34.925: I/System.out(31387): Degree Sensor value:244.0 
    01-04 17:52:34.955: I/System.out(31387): Calculatebearing value:173.96307878454928 
    01-04 17:52:34.955: I/System.out(31387): Raw Sensor value:72.0893408779263 
    01-04 17:52:34.955: I/System.out(31387): Degree Sensor value:72.0 
    01-04 17:52:35.065: I/System.out(31387): Calculatebearing value:108.5784565015826 
    01-04 17:52:35.065: I/System.out(31387): Raw Sensor value:137.473963160893 
    01-04 17:52:35.070: I/System.out(31387): Degree Sensor value:137.0 

학위 센서 값이 짧은 시간에 크게 뛰었습니다. 계산 된 방위각을 기반으로 화면에 그려지는 화살표가 있습니다.이 각도는 활동에 두 번째로로드되면 미친 것처럼 점프합니다.

두 번째 인스턴스가이 활동으로 생성 된 것으로 의심되지만 Manifest 파일에 android : launchMode = "singleInstance"태그를 사용하여이를 방지하고이를 방지하려고합니다.

나는 그 누구도 경험하지 못한 문제가 있습니까? 나는 그물에 유사한 문제를 찾아내는 것을 보이지 않는다.

답변

0

문제가있는 활동을 자체 응용 프로그램으로 이동 한 후에도 동일한 문제가 발생했습니다. 동일한 활동의 ​​여러 인스턴스가 실행되고 있다는 우려를 없애줍니다.

이를 읽은 후 : https://groups.google.com/forum/?fromgroups=#!topic/android-developers/UNMaDEUcXb0

나는 OnSensorchanged 방법을 내 코드를 변경하여 문제를 해결.

경우 Sensor.TYPE_MAGNETIC_FIELD을 변경 : 그것의 더 나은 변화하는 객체 센서 부 값의 복제를 사용할 수 있도록 여러 실행 후 포인터에 문제가 발생한 것 같습니다 잡지 = event.values;

Sensor.TYPE_MAGNETIC_FIELD 경우에 : 탄 = event.values.clone();