2012-05-25 54 views
0

我必須做一個應用程序,通過晃動手機來返回一個隨機數。我用它做了一個按鈕,它工作正常。問題出在加速計上。它不起作用,即使我沒有錯誤。加速計應用程序

import java.util.Random; 

import android.app.Activity; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.os.Bundle; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class RandomButtonActivity extends Activity implements SensorEventListener 
{ 
    Button tasto1; 

    TextView testo; 
    TextView message; 

    EditText limiteMin; 
    EditText limiteMax; 

    Random generator = new Random(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     testo = (TextView) findViewById(R.id.textView1); 

     limiteMin = (EditText) findViewById(R.id.editText2); 
     limiteMax = (EditText) findViewById(R.id.EditText01); 
    } 

    public void onSensorChanged(SensorEvent event) 
    { 
     Sensor sensor = event.sensor; 
     if (sensor.getType()==Sensor.TYPE_ACCELEROMETER) 
     { 
     int j = Integer.parseInt(limiteMin.getText().toString()); 
     int i = Integer.parseInt(limiteMax.getText().toString())-j; 
     int x = 0; 

     if(i==0 && j==0) 
     { 
      x = generator.nextInt(); 

      while(x<0) 
      { 
       x = generator.nextInt(); 
      } 
     } 

     else 
     { 
      if(j>=i) 
      {    
       i = 0; 
       j = 0; 
      } 
      else 
      { 
       x = generator.nextInt(i+1)+j; 
       testo.setText(""+x); 

      } 
     } 
     testo.setText(""+x); 
     } 

     else 
     { 

     } 
    } 

    public void onAccuracyChanged(Sensor sensor, int accuracy) 
    { 
    } 
} 

環顧網絡這個代碼應該工作得很好。我對XML文件沒有做任何事情。

編輯:

我說:

<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" 

到Android:清單,但一切都沒有改變。

+0

這個問題與「Reddit」有什麼關係?使用[tag:android]標籤可能會更好。 –

回答

1

看來你永遠不會把你的類添加爲事件監聽器。 此代碼的工作對我來說:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //This is what you are missing: 
    sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI); 
} 
public void onSensorChanged(SensorEvent event) 
{ 
    Sensor sensor = event.sensor; 
    if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) 
    { 
     /// Do something 
    } 
} 
public void onAccuracyChanged(Sensor sensor, int accuracy) 
{ 
} 

這也是一個好主意,覆蓋的onResume /的onStop /的onPause這樣

@Override protected void onResume() 
    { 
    super.onResume(); 
    sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    @Override protected void onStop() 
    { 
    sm.unregisterListener(this); 
    super.onStop(); 
    } 

正如ernell總是提到記得有你在需要的權限表現。

+0

我不知道該如何謝謝你!你讓我整整一週。非常感謝! ;) –