Search code examples
sensormanager

My Android App is crashed when I register SensorManager.registerListener


Below is my code. I am having a problem when I call SensorManager.registerListener, my app will crash. Can someone tell me what's going on? I just follw the web guide to setup SensorManger, Sensor(Accelerometer) and then register the action lintener to detect the montion of accelerometer. I used API 21 to develop this app.

public class MainActivity extends ActionBarActivity implements SensorEventListener{
private TextView tip;
private SensorManager mSensorManager;
private Sensor mSensor;
private float axisX = 0;             
private float axisY = 0 ;  
private float axisZ = 0;

@Override  
protected void onResume() {    
    super.onResume();    
    setUpAcceleratorSensor();
    mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL); 
}

@Override
protected void onPause() { 
    super.onPause();  
    mSensorManager.unregisterListener(this);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setUpAcceleratorSensor();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

private void setUpAcceleratorSensor(){
    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    if((mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)) != null);
    else
        Toast.makeText(this, "No Sensor Device Exist", Toast.LENGTH_LONG).show();
 }

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    Sensor mySensor = event.sensor;

    if (mySensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        if(event.values[0] != 0 || event.values[1] != 0 || event.values[2] != 0){
            axisX = event.values[0];             
            axisY = event.values[1];              
            axisZ = event.values[2];    
            tip.setText("Detect your montion");
        }
    }
    else
        Toast.makeText(this, "Cannot Get Sensor Device", Toast.LENGTH_LONG).show();
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub

}
}

Thanks.


Solution

  • First that I always check when something like this goes wrong, is to check that you have all the correct permissions in the Android Manifest; however, I don't believe that there are any permissions associated with using the position sensors. I would check on this first. That is what comes to mind first, after you post logcat, we will be able to give a more detailed answer.