Sleep Timer in Kombination mit Bewegungssensor

  • Antworten:0
pepperonas
  • Forum-Beiträge: 434

09.09.2013, 10:00:24 via Website

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. Wenn eins der Beiden Ereignisse eintritt soll seine neue Activity aufgerufen werden.

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:

1public class WaitingForBomb extends Activity {
2
3 float sensibility = 2.5f;
4 boolean isOver = false;
5 private SensorManager mSensorManager;
6 private float mAccel; // Beschleunigung
7 private float mAccelCurrent; // aktuelle Beschleunigung (in Verbindung mit
8 // Erdanziehung)?
9 private float mAccelLast; // letzte Beschleunigung (in Verbindung mit
10 // Erdanziehung)?
11 TextView anzeige;
12
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15
16 // TODO Auto-generated method stub
17 super.onCreate(savedInstanceState);
18 setContentView(R.layout.waiting);
19
20
21 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
22 mSensorManager.registerListener(mSensorListener,
23 mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
24 SensorManager.SENSOR_DELAY_NORMAL);
25 mAccel = 0.00f;
26 mAccelCurrent = SensorManager.GRAVITY_EARTH;
27 mAccelLast = SensorManager.GRAVITY_EARTH;
28 bombTimer.start();
29
30 }
31
32 // Sleep-Timer
33 Thread bombTimer = new Thread() {
34 public void run() {
35 try {
36 // Intent-Übergabe des Counters
37 Intent mIntent = getIntent();
38 int counterValue = mIntent.getIntExtra("pushCounter", 0);
39 Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
40 v.vibrate(counterValue);
41 sleep(counterValue);
42 isOver = true;
43 } catch (InterruptedException e) {
44 e.printStackTrace();
45 } finally {
46 isOver = true;
47 }
48 }
49 };
50
51 // Verhindert, dass die "Back-Taste" erkannt wird und somit das Spiel
52 // vorzeitig beendet wird.
53 @Override
54 public void onBackPressed() {
55 }
56
57 private final SensorEventListener mSensorListener = new SensorEventListener() {
58
59 public void onSensorChanged(SensorEvent se) {
60 float x = se.values[0];
61 float y = se.values[1];
62 float z = se.values[2];
63 mAccelLast = mAccelCurrent;
64 mAccelCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
65 float delta = mAccelCurrent - mAccelLast;
66 mAccel = mAccel * 0.9f + delta; // perform low-cut filter
67
68 SharedPreferences getPrefs = PreferenceManager
69 .getDefaultSharedPreferences(getBaseContext());
70 boolean checkSense1 = getPrefs.getBoolean("sensi1", true);
71 boolean checkSense2 = getPrefs.getBoolean("sensi2", false);
72
73 if (checkSense1 == true) {
74 sensibility = 1.25f;
75 }
76
77 if (checkSense2 == true) {
78 sensibility = 0.75f;
79 }
80
81 // Hier wird geprüft ob das Handy zu stark geschüttelt wurde
82 if (mAccel > sensibility) {
83 Intent gameOver = new Intent("android.intent.action.BOOM");
84 startActivity(gameOver);
85 }
86 if (isOver == true) {
87 Intent gameOver = new Intent("android.intent.action.BOOM");
88 startActivity(gameOver);
89 }
90 }
91
92 public void onAccuracyChanged(Sensor sensor, int accuracy) {
93 }
94 };
95
96 @Override
97 protected void onResume() {
98 super.onResume();
99 mSensorManager.registerListener(mSensorListener,
100 mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
101 SensorManager.SENSOR_DELAY_NORMAL);
102 }
103
104 @Override
105 protected void onPause() {
106 mSensorManager.unregisterListener(mSensorListener);
107 super.onPause();
108 finish();
109 }
110}

Wenn ich ehrlich bin habe ich noch nicht so wirklich verstanden wie das mit den Threads funktioniert. Wie bekomme ich diese Abfrage
Code:

1if (mAccel > sensibility)

in meine run()-Methode? Ich denke jedenfalls das sie da rein müsste.

Vielen Dank im Voraus!
Martin

Open Source

Antworten