Timer startet nicht bei größeren werten

  • Antworten:4
android tester
  • Forum-Beiträge: 29

10.06.2013, 14:38:06 via Website

Hallo,

ich habe mich mal wieder etwas an meine App gesetzt und komme nicht weiter, ich habe folgendes Problem:

Ich möchte x sekunden nach anrufbeginn einen Ton abspielen. ich habe nun mehrere Verianten getestet, einmal mit Timer und TimerTask, diesen über ein Datum oder eine millisekundenzahl angesteuert. Nun habe eine Runnable Class welche den Ton abspielt und diese Runnable wird von einem Handler aufgerufen. Alle Varianten führen zum gleichen Resultat: der Ton wird erfolgreich abgespielt, wenn der Timer auf 8 Sekunden oder weniger eingestellt ist, ist er höher wird er nicht ausgelöst, und das ist bei allen Varianten gleich... Ich habe mir nun gedacht ok wenn er kurze Timer haben will dann rufe ich die Runnable 2 mal auf und setze den Timer auf 5 sec und starte den Ton erst beim 2. Aufruf aber das geht auch nicht. selbes Spiel setze ich den Timer auf 4 sekunden also insgesamt 8, so wird der Ton abgespielt....
Ich verstehs einfach nicht, ich will doch nur nach 10 oder 20 sekunden im Anruf einen Ton abspielen....

Hoffe ihr könnt mir helfen! Bin echt für jeden Tip dankbar.

Hier noch meine aktuelle Version vom Code (gekürzt):


Der listener der den ersten Aufruf tätigt:
1private class PhoneCallListener extends PhoneStateListener {
2 ...
3 if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
4 playHandler.postDelayed(runnable, 4000); // mit 4000ms funktioniert es mit 5000 nicht...
5 }


Die Runnable (counter wird mit 0 erzeugt):
1private Runnable runnable = new Runnable() {
2 public void run() {
3 if (counter > 0){
4 String testPath = Environment.getExternalStorageDirectory() + "/test.mp3";
5 playSound();
6 counter = 0;
7 }
8 else{
9 counter++;
10 playHandler.postDelayed(this, 4000); // mit 4000ms funktioniert es mit 5000 nicht...
11 }
12 }
13};


Und meine playSound Methode:
1public void playRecord(){
2 mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.test);
3 mPlayer.start();
4}

Antworten
impjor
  • Forum-Beiträge: 1.793

10.06.2013, 17:08:12 via App

Eventuell liegt es daran, dass Android deine App (und damit den Handler) schließt. Ich würde mal probieren einen Service zu starten und in diesem dann ein Runnable zu starten, welches nach 10s ausgeführt wird.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
android tester
  • Forum-Beiträge: 29

11.06.2013, 07:11:43 via Website

Vielen Dank, hatte noch nicht mit Services gearbeitet, habe das mal umgesetzt und den Aufruf wie folgt gestartet:

1callIntent = new Intent(MainActivity.this, CallService.class);
2callServicePendingIntent = PendingIntent.getService(this, 0, callIntent, 0);

1if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
2 long startTime = System.currentTimeMillis() + 8000;
3 AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
4 am.set(AlarmManager.RTC, startTime, callServicePendingIntent);
5}

1public class CallService extends Service{
2 public IBinder onBind(Intent arg0) {
3 return null;
4 }
5
6 public void onCreate() {
7 super.onCreate();
8 playSound(MainActivity.testPath);
9 }
10
11public void playSound(String myPath){
12 MainActivity.mPlayer = new MediaPlayer();
13 try {
14 MainActivity.mPlayer.setDataSource(myPath);
15 MainActivity.mPlayer.prepare();
16 } catch (Exception e) {}
17 MainActivity.mPlayer.start();
18 MainActivity.startedSound = true;
19 }
20}

hoffe das ist so korrekt und ich kann über den Service auf alles aus meiner MainActivity zugreifen, auch wie wenn du sagst die App nach einer Zeit beendet wird.

Funtkioniert an sich auch aber eben wieder selbes Problem wie zuvor, wähle ich einen Wert von 10000 funtkioniert es nicht mehr...

Hoffe ihr habt noch eine Idee, ich verzweifel langsam...

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

11.06.2013, 09:27:55 via App

Vom Service aus kannst Du nicht verlässlich auf Activity Komponenten zugreifen. Wenn die Activity nicht aktiv ist, wird sie von Android gekillt.

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Michele
  • Forum-Beiträge: 1.525

11.06.2013, 14:50:33 via Website

1. Wie lang ist der Sound? Ist er kurz, dann nimmst du SoundPool und kein MediaPlayer.
2. Warum nimmst du dein Sound aus der Activity?
3. Nimm ein Thread mit sleep(); wenn es nicht klappen sollte.
4. Oder schreib dein Timer und TimerTask mal anders.



LG

Antworten