2011-12-06 16 views
5

W mojej aplikacji na Androida próbuję odtworzyć bieżący domyślny dzwonek na Tworzenie mojej aktywności. Ale dzwonek nie zagrałby po prostu całkowicie i zatrzymałby się na dowolnej długości za każdym razem.Odtwarzanie dzwonka z aktywności nagle zatrzymuje się

Kod jest tak prosty, jak tylko może być, każda pomoc będzie doceniona.

Uri currentUri = RingtoneManager.getActualDefaultRingtoneUri(this.context, 
    RingtoneManager.TYPE_RINGTONE); 
Ringtone ringtone = RingtoneManager.getRingtone(this.context,currentUri); 
if (ringtone != null){ 
    ringtone.play(); 
} 
+0

Mam ten sam problem, powróci, jeśli znajdę rozwiązanie. – cYrixmorten

Odpowiedz

0

Używam TYPE_NOTIFICATION ale appart z tego, że mój kod był mniej więcej taki sam.

Okazało się, że odtwarzanie dźwięku wewnątrz nowego Handler pomógł w moim przypadku:

 Uri currentUri = RingtoneManager.getActualDefaultRingtoneUri(
       this.context, RingtoneManager.TYPE_RINGTONE); 
     final Ringtone ringtone = RingtoneManager.getRingtone(this.context, 
       currentUri); 
     if (ringtone != null) { 
      new Handler().post(new Runnable() { 

       @Override 
       public void run() { 
        ringtone.play(); 
       } 
      }); 
     } 

Dlaczego to rozwiązać ten problem?

Wierzę, że RingtoneManager może użyć wątku UI do odtworzenia dźwięku, więc jeśli wątek interfejsu użytkownika zostanie użyty do tworzenia/rysowania widoków lub wykonywania obliczeń w tym samym czasie, co dźwięk, może zostać przerwany.

Podczas korzystania z nowego programu obsługi odtwarzanie jest ustawiane w kolejce do wykonania innych operacji, pozostawiając dźwięk bez zakłóceń.

Przynajmniej takie jest moje postrzeganie: What exactly does the post method do?

0

miałem ten sam problem i powyżej odpowiedzi nie działa w moim przypadku.

Ale dzwonek pracuje normalnie w powiadomieniu więc zrobiłem zawiadomienie (bez zawartości)

Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     NotificationCompat.Builder mBuilder; 
     mBuilder = 
       new NotificationCompat.Builder(this) 
       .setSound(alarmSound) 
       .setVibrate(new long[]{1000,1000}); 

     mNotificationManager.notify(ANY_INT_WILL_DO_HERE, mBuilder.build()); 

to zadziałało w moim przypadku. Mam nadzieję, że to też działa dla ciebie.

Ale nie jestem pewien, czy to nie zaszkodzi, jeśli zrobię to fałszywe zgłoszenie tylko do odtwarzania dzwonka