2014-12-03 175 views
0

下面是我的代码。当我调用SensorManager.registerListener时遇到问题,我的应用程序将崩溃。有人能告诉我发生了什么事吗? 我只是按照Web指南设置SensorManger,传感器(加速度计),然后注册动作lintener来检测加速计的显示。 我使用API​​ 21来开发这个应用程序。当我注册SensorManager.registerListener时,我的Android应用程序崩溃了

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 

} 
} 

谢谢。

+1

您需要在任何人都可以协助之前包含logcat输出。 – 2014-12-03 03:34:53

回答

0

首先,我总是检查何时出现这样的问题,是检查您是否拥有Android Manifest中的所有正确权限;但是,我不相信使用位置传感器有任何权限。我会先检查一下。首先想到的是,在发布logcat之后,我们将能够给出更详细的答案。

0

尝试获得的传感器,而不是你的setUpAccelerometer()方法这样

mSensor = mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);

相关问题