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"태그를 사용하여이를 방지하고이를 방지하려고합니다.
나는 그 누구도 경험하지 못한 문제가 있습니까? 나는 그물에 유사한 문제를 찾아내는 것을 보이지 않는다.