2014-12-03 174 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);

相關問題