2012-05-25 4 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.

EDIT:

Я добавил:

<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

Я не знаю, как поблагодарить вас! Ты провел всю неделю. Спасибо огромное! ;) –

Смежные вопросы