나는 당신이 당신과 같이 직면하고있는 방법을 보여줍니다 위치 화살표를 포함하여,지도 응용 프로그램을 만들고있어 : 방위각. 화면이 지평선 위를 가리키고 세로 방향으로 전화가 걸려 있으면 화살표가 정상적으로 작동합니다. 그러나 :인간의 방향과 일치하는 안드로이드 전화 방향을 얻는 방법? <p></p> <p><img src="https://i.stack.imgur.com/o9DYE.png" alt="Map with a blue arrow"></p> 내가 <code>SensorManager.getOrientation()</code>에서 직접 방향을 얻을 첫 번째 반환 값을 사용하여 :
- 화면이 수평선 아래를 가리 키도록 휴대 전화를 잡고 있으면 화살표는 사용자가 향하고있는 방향에서 180도 떨어진 지점을 가리 킵니다.
- 화면이 수평이되도록 전화를 잡았을 때 화살표는 가리키는 방향을 알 수 없습니다. 방위각은 의미있는 결과를 전혀 반환하지 않습니다.
- 휴대 전화를 왼쪽이나 오른쪽으로 기울이거나 가로 방향으로 기울이면 화살표가 왼쪽이나 오른쪽으로 기울어집니다.
아래의 신중하게 제작되고 과학적인 이미지는 내가 의미하는 바를 나타냅니다 (파란색은 사용자의 얼굴, 빨간색은 화살표 방향, 화면은 대략 사용자의 얼굴을 향하고 있으며 Google지도는 원하는대로 정확하게 수행함).
간단히 여기에 표시된 Y 축 방향을 사용하여 : http://developer.android.com/reference/android/hardware/SensorEvent.html, Z 축 방향 지시의 반대 방향, 대부분의 시간 및 Y가 전화기가 평평한 경우 사용하려고 할 때. 그러나 getOrientation()
이 반환하는 값을 감안할 때 복잡한 문제를 작성하여 일부 문제를 해결해야하며 전화를 향한 지평선 사용 사례는 해결할 수 없습니다. 더 쉬운 방법이 있다고 확신합니다.
float[] rotationMatrix = new float[9];
if(SensorManager.getRotationMatrix(rotationMatrix, null, lastAcceleration, lastMagneticField)){
float[] orientMatrix = new float[3];
SensorManager.getOrientation(rotationMatrix, orientMatrix);
orientation = orientMat[0]*180/(float)Math.PI;
}
내가 잘못 뭐하는 거지 :
여기 (lastAcceleration 및 lastMagneticField 모두 내부 센서에서 온) 내 코드입니까? 이 작업을 수행하는 더 쉬운 방법이 있습니까?
편집 : 명확히하기 위해, 나는 사용자가 장치를 앞에두고 화면이 그들을 향하고 있다고 가정합니다. 저쪽을 돌면 나는 분명히 말할 수 없다. 또한, 나는 움직일 때 사용자의 움직임을 사용하고 있지만, 이것은 정지 상태 일 때를위한 것입니다.
+1 과학적 이미지 –
는 문제가 해결 되었습니까? lastAcceleration, lastMagneticField는 어떻게 얻었습니까? –
Nope. 절대로 해결하지 못했습니다. 어쩌면 해결할 수 없었을 것입니다. 그리고 구글 맵스는 내가 생각한만큼 현명하지 못한 것 같습니다. 나는 오랫동안 같은 일을하는 대신에 같은 회사에서 일하지 않기 때문에 일을해야하는 일 목록에서 그것을 버렸다. 어쨌든 안드로이드는 요즘과는 완전히 다른 방식으로 작동합니다. – AlbeyAmakiir