ui_3k1
Gesperrt
- 197
Hallo ihr Guten,
ich möchte einen Sleep-Timer in Kombination mit einem Bewegungssensor ablaufen lassen.
Es geht darum:
Man stellt am Handy eine Zeit ein, die runterläuft, gleichzeitig soll während des Herunterzählens geprüft werden, ob das Handy zu stark geschüttelt wurde.
Bei meinem S4 klappt das auch schon sehr gut, allerdings funktioniert der Code auf einem S2 wiederum nicht. Ich verstehe es nicht.
Bzw, mir ist aufgefallen, dass es auf meinem S4 doch nicht so reibungslos läuft, wenn der Bewegungssensor aktiviert wurde, wird der Thread nicht beendet sondern läuft weiter und aktiviert sich irgendwann im Hintergrund.
Hier der Code:
Wenn ich ehrlich bin habe ich noch nicht so wirklich verstanden wie das mit den Threads funktioniert. Wie bekomme ich diese Abfrage
in meine run()-Methode? Ich denke jedenfalls das sie da rein müsste.
Vielen Dank im Voraus!
Martin
ich möchte einen Sleep-Timer in Kombination mit einem Bewegungssensor ablaufen lassen.
Es geht darum:
Man stellt am Handy eine Zeit ein, die runterläuft, gleichzeitig soll während des Herunterzählens geprüft werden, ob das Handy zu stark geschüttelt wurde.
Bei meinem S4 klappt das auch schon sehr gut, allerdings funktioniert der Code auf einem S2 wiederum nicht. Ich verstehe es nicht.
Bzw, mir ist aufgefallen, dass es auf meinem S4 doch nicht so reibungslos läuft, wenn der Bewegungssensor aktiviert wurde, wird der Thread nicht beendet sondern läuft weiter und aktiviert sich irgendwann im Hintergrund.
Hier der Code:
Code:
public class WaitingForBomb extends Activity {
float sensibility = 2.5f;
boolean isOver = false;
private SensorManager mSensorManager;
private float mAccel; // Beschleunigung
private float mAccelCurrent; // aktuelle Beschleunigung (in Verbindung mit
// Erdanziehung)?
private float mAccelLast; // letzte Beschleunigung (in Verbindung mit
// Erdanziehung)?
TextView anzeige;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.waiting);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(mSensorListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
mAccel = 0.00f;
mAccelCurrent = SensorManager.GRAVITY_EARTH;
mAccelLast = SensorManager.GRAVITY_EARTH;
bombTimer.start();
}
// Sleep-Timer
Thread bombTimer = new Thread() {
public void run() {
try {
// Intent-Übergabe des Counters
Intent mIntent = getIntent();
int counterValue = mIntent.getIntExtra("pushCounter", 0);
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(counterValue);
sleep(counterValue);
isOver = true;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
isOver = true;
}
}
};
// Verhindert, dass die "Back-Taste" erkannt wird und somit das Spiel
// vorzeitig beendet wird.
@Override
public void onBackPressed() {
}
private final SensorEventListener mSensorListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent se) {
float x = se.values[0];
float y = se.values[1];
float z = se.values[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
boolean checkSense1 = getPrefs.getBoolean("sensi1", true);
boolean checkSense2 = getPrefs.getBoolean("sensi2", false);
if (checkSense1 == true) {
sensibility = 1.25f;
}
if (checkSense2 == true) {
sensibility = 0.75f;
}
// Hier wird geprüft ob das Handy zu stark geschüttelt wurde
if (mAccel > sensibility) {
Intent gameOver = new Intent("android.intent.action.BOOM");
startActivity(gameOver);
}
if (isOver == true) {
Intent gameOver = new Intent("android.intent.action.BOOM");
startActivity(gameOver);
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
mSensorManager.unregisterListener(mSensorListener);
super.onPause();
finish();
}
}
Wenn ich ehrlich bin habe ich noch nicht so wirklich verstanden wie das mit den Threads funktioniert. Wie bekomme ich diese Abfrage
Code:
if (mAccel > sensibility)
Vielen Dank im Voraus!
Martin