2012-04-06 3 views
4

Ich habe eine Anwendung mit der gewünschten Funktionalität.Implementieren von Pieptönen in Android-Anwendung

Hingegen werden zu bestimmten Zeiten Toasts angezeigt und ich möchte einen doppelten Piepton gleichzeitig abspielen, damit die Toasts angezeigt werden, um den Benutzer auf die angezeigten Meldungen aufmerksam zu machen.

Ich bin nicht sicher, was der beste Ansatz für das Abspielen von Sounds in Android ist oder ob es einige Standardgeräusche gibt, auf die ich für die Warnungen zugreifen könnte.

Einige Anleitung würde sehr geschätzt werden!

Dank

UPDATE

ich in meiner Haupttätigkeit Datei den folgenden Code haben:

public void playAlertTone(final Context context){ 
      Thread t = new Thread(){ 
        public void run(){ 
         MediaPlayer player = null; 
         int countBeep = 0; 
         while(countBeep<2){ 
         player = MediaPlayer.create(context,R.raw.beep); 
         player.start(); 
         countBeep+=1; 
         try { 


          Thread.sleep(player.getDuration()+100); 
         } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         } 
        } 
       }; 
       t.start(); 

      } 

ich eine Sounddatei namens Piepton in res haben/raw

Wie kann ich diese Methode in einer if-Anweisung aufrufen, wo ein Toast angezeigt wird? Yed so die 2 zur gleichen Zeit auftreten?

UPDATE 2:

Hier ist der Code, wo ich versuche, die Benachrichtigungsmethode zu nennen:

if (elapsedTime > hourAlert) 
     { 
      LayoutInflater inflater = getLayoutInflater(); 
      View layout = inflater.inflate(R.layout.toast_layout, 
              (ViewGroup) findViewById(R.id.toast_layout_root)); 
      TextView text = (TextView) layout.findViewById(R.id.text); 
      text.setText("HOUR PASSED"); 

      Toast toast = new Toast(getApplicationContext()); 
      toast.setGravity(Gravity.BOTTOM, 0, 160); 
      toast.setDuration(Toast.LENGTH_LONG); 
      toast.setView(layout); 
      toast.show(); 
      playAlertTone(getApplicationContext()); // Edited here now call 

Irgendwelche Ideen?

+0

post den code, wo sie disp sind lege Toast und rufe diese Methode auf – Ravi1187342

+0

Siehe den Code-Ausschnitt unter UPDATE 2 – Rob

+0

Ich habe das editiert 'playAlertTone (getApplicationContext()); // Bearbeitet hier jetzt call' – Ravi1187342

Antwort

5

Sie Datei in res/raw Ordner Ihres Projekts setzen Sie Ihre Audio-

zeigt und play audio in einem thread

public void playAlertTone(final Context context){ 


    Thread t = new Thread(){ 
      public void run(){ 
       MediaPlayer player = null; 
       int countBeep = 0; 
       while(countBeep<2){ 
       player = MediaPlayer.create(context,R.raw.beep); 
       player.start(); 
       countBeep+=1; 
       try { 

           // 100 milisecond is duration gap between two beep 
        Thread.sleep(player.getDuration()+100); 
             player.release(); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 


       } 
      } 
     }; 

     t.start(); 

    } 

//call it like this from your activity' any method 



    if(myCondition){ 

    Toast.makeText(getApplicationContext(), text, duration).show(); 

    playAlertTone(getApplicationContext()); 


    } 
+0

Ok Ich bin dabei, diesen Ansatz zu versuchen. Ich habe diese Methode zu meiner Hauptaktivität hinzugefügt, aber ich bin mir nicht sicher, wie ich sie in einer if-Anweisung aufrufen soll. Zum Beispiel habe ich einen Timer, der nach 10 Sekunden einen Toast anzeigt, wie kann ich die obige Methode aufrufen, um den Signalton gleichzeitig mit dem Toast zu spielen. Irgendwelche Ideen? – Rob

+0

können Sie anrufen. Übergeben Sie Context als Parameter für diese Methode. Testen Sie Ihren Ansatz und lassen Sie mich wissen, was passiert. – Ravi1187342

+0

gefällt das playAlertTone (context); ? - Es besagt, dass der Kontext nicht in eine Variable aufgelöst werden kann – Rob

2

Verwendung MediaPlayer,

http://developer.android.com/reference/android/media/MediaPlayer.html

gibt es eine Menge zu wissen, wie, zu verwenden, die in dem obigen Link bedeckt ist. hier ist ein T-Shirt-Schnipsel, die die Nutzung kann,

final MediaPlayer mediaPlayer = new MediaPlayer(); 
try { 
    mediaPlayer.reset(); 
    mediaPlayer.setDataSource(...); 
    mediaPlayer.prepare(); 
} catch (IllegalStateException e) { 
    mediaPlayer.release(); 
} catch (IOException e) { 
    mediaPlayer.release(); 
} catch (IllegalArgumentException e) { 
    mediaPlayer.release(); 
} 
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 

    public void onCompletion(MediaPlayer mp) { 
     mediaPlayer.release(); 
      } 
    }); 
mediaPlayer.start(); 
1
try { 
    AssetFileDescriptor afd = getAssets().openFd("gavel_single.wav"); 
    mMediaplayer = new MediaPlayer(); 
    mMediaplayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
    afd.close(); 
    mMediaplayer.prepare(); 
    mMediaplayer.start(); 
    mMediaplayer.setOnCompletionListener(new OnCompletionListener() { 
     public void onCompletion(MediaPlayer mMediaPlayer) { 
      mMediaPlayer.stop(); 
      mMediaPlayer.release(); 
     } 
    }); 
} catch (Exception e) { 
     e.printStackTrace(); 
} 

setzen Sie Ihre Musikdatei im Asset-Ordner