ateşleyemeyen ve ben üzerinde 2.3 ile benim LG Optimus S mükemmel çalışıyor bu etkinliği var, ama benim stok üzerinde ICS 4.0.2 çalıştıran Verizon Galaxy Nexus TYPE_MAGNETIC_FIELD olayı hiç ateş etmiyor.TYPE_MAGNETIC_FIELD olay benim Galaxy Nexus ICS ben telefonun eğik açı almaya çalışıyorum 4.0.2
TYPE_MAGNETIC_FIELD olayı hiç tetiklemediğinden, SensorManager.getRotationMatrix'e geçmek için gerekli mGravs dizisini alamıyorum. Bu yüzden telefonun açısını anlatamam. Bu kodun diğer cihazımda harika çalıştığından ve telefonun eğim açısını problemsiz görebildiğim gibi. Benim Galaxy Nexus ile bu olayı almamanızın
Herhangi biliyor musunuz? SDK'nın çalışmasını engelleyecek herhangi bir değişiklik oldu mu?package com.rain.united;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class Gameplay extends Activity implements SensorEventListener{
private static final String TAG = "CameraDemo";
private TextView mOrientationData;
private SensorManager mSensMan;
private float mAzimuth;
private float[] mGravs = new float[3];
private float[] mGeoMags = new float[3];
private float[] mOrientation = new float[3];
private float[] mRotationM = new float[9];
private float[] mRemapedRotationM = new float[9];
private boolean mFailed;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gameplay);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mOrientationData = (TextView) findViewById(R.id.orientation_data);
mSensMan = (SensorManager) getSystemService(SENSOR_SERVICE);
}
protected void onResume() {
super.onResume();
mSensMan.registerListener(this, mSensMan.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_UI);
mSensMan.registerListener(this, mSensMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
}
protected void onPause() {
super.onPause();
mSensMan.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
return;
Log.d("united", "anything");
switch (event.sensor.getType()) {
case Sensor.TYPE_MAGNETIC_FIELD:
//I NEVER GET TO THIS CODE ON MY GALAXY NEXUS
System.arraycopy(event.values, 0, mGravs, 0, 3);
Log.d("united", mGravs.toString());
break;
case Sensor.TYPE_ACCELEROMETER:
// Here let's try another way:
for (int i=0;i<3;i++) mGeoMags[i] = event.values[i];
break;
default:
return;
}
if (SensorManager.getRotationMatrix(mRotationM, null, mGravs, mGeoMags)){
//Rotate to the camera's line of view (Y axis along the camera's axis)
//TODO: Find how to use android.opengl.Matrix to rotate to an arbitrary coordinate system.
SensorManager.remapCoordinateSystem(mRotationM, SensorManager.AXIS_X,
SensorManager.AXIS_Z, mRemapedRotationM);
SensorManager.getOrientation(mRemapedRotationM, mOrientation);
onSuccess();
} else {
onFailure();
}
}
void onSuccess(){
if (mFailed) mFailed = false;
// Convert the azimuth to degrees in 0.5 degree resolution.
mAzimuth = (float) Math.round((Math.toDegrees(mOrientation[0])) *2)/ 2;
// Adjust the range: 0 < range <= 360 (from: -180 < range <= 180).
mAzimuth = (mAzimuth+360)%360; // alternative: mAzimuth = mAzimuth>=0 ? mAzimuth : mAzimuth+360;
mOrientationData.setText("Azimuth= " + mAzimuth);
}
void onFailure() {
if (!mFailed) {
mFailed = true;
mOrientationData.setText("didn't get rotation info");
}
}
}
Bununla başa çıkmayı başardınız mı? – Mikooos
Aynı problemim var. –
Galaxy S3 ve Asus tablette de aynı sorun var. Birisi bu kötü şeyi düzeltti mi? – WindRider