2012-02-28 9 views
5

पर फायरिंग नहीं कर रहा है, मैं फोन के झुका हुआ कोण प्राप्त करने की कोशिश कर रहा हूं, और मेरे पास यह गतिविधि है जो मेरे एलजी ऑप्टिमस एस पर 2.3 के साथ पूरी तरह से काम करती है, लेकिन मेरे स्टॉक पर वेरिज़ोन गैलेक्सी नेक्सस आईसीएस 4.0.2 चला रहा है TYPE_MAGNETIC_FIELD ईवेंट कभी आग नहीं करता है।TYPE_MAGNETIC_FIELD ईवेंट मेरे गैलेक्सी नेक्सस आईसीएस 4.0.2

क्योंकि TYPE_MAGNETIC_FIELD ईवेंट कभी भी आग नहीं करता है, मुझे सेंसर मैनेजर.getRotationMatrix में जाने के लिए आवश्यक mgravs सरणी नहीं मिलती है। तो मैं फोन के कोण को नहीं बता सकता। जैसा कि मैंने बताया है कि यह कोड मेरे अन्य डिवाइस पर बहुत अच्छा काम करता है और मैं फोन के झुकाव कोण को बिना किसी समस्या के देख सकता हूं।

कोई भी जानता है कि मुझे इस गैलेक्सी नेक्सस के साथ यह कार्यक्रम क्यों नहीं मिलेगा? क्या एसडीके में कोई बदलाव आया है जो इसे काम करने से रोक देगा?

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"); 
     } 
    } 
} 
+0

क्या आप इससे निपटने में कामयाब रहे? – Mikooos

+1

मुझे एक ही समस्या है। –

+0

हमें गैलेक्सी एस 3 और एसस टैबलेट पर एक ही समस्या है। क्या किसी ने इस बुरा चीज़ को ठीक किया? – WindRider

उत्तर

3
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) return; 

इस लाइन निकालें:

यहाँ मेरी गतिविधि है। चुंबकीय सेंसर इस सटीकता की स्थिति को वापस कर रहा है और आपका कोड इन घटनाओं को फेंक रहा है।

+0

Thx, यह एसई एक्सपीरिया मिनी एक्स 8 और सैमसंग गैलेक्सी एस 1 (और शायद कई और) पर मदद मिली – Hrk

+0

मुझे भी मदद की !!!!! – user2924714