2012-11-22 21 views
1

我正在使用RingtoneManager和RingtonePreference。當我使用默認的鈴聲時,沒有任何問題,但是當我使用配置的鈴聲時,它播放了幾分鐘...我不知道歌曲的播放時長是分鐘還是循環播放...鈴聲打得太久

這裏我的代碼:

private static void playNotificationSound(Context context) { 
    RingtoneManager rm = new RingtoneManager(context); 
    String ringtone = MySharedPreferences.ringtone(context); 
    Uri uri = null; 
    if(ringtone == null) 
     uri = RingtoneManager 
      .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    else 
     uri = Uri.parse(ringtone); 
    if (uri != null) { 
     Ringtone rt = RingtoneManager.getRingtone(context, uri); 
     if (rt != null) { 
      rt.setStreamType(AudioManager.STREAM_NOTIFICATION); 
      rt.play(); 
     } 
    } 
} 

我用它來播放一首歌曲進行通知,我不希望手機的5分鐘玩...

+2

什麼是手機鈴聲的大小? –

+0

我不知道大小。它的鈴聲//媒體/內部/音頻/媒體/ 33 – jobe

+0

但奇怪的是,當我使用uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);鈴聲只播放一次。 – jobe

回答

0

你可以使用線程這樣嗎?

if (rt != null) { 
       rt.setStreamType(AudioManager.STREAM_NOTIFICATION); 

       rt.play(); 
      } 

      Thread myThread = new Thread() { 

       int wait = 0; 

       @Override 
       public void run() { 
        try { 
         super.run(); 

         while (wait < 5000) { 
          sleep(500); 
          wait += 500; 
         } 
        } catch (Exception e) { 

        } finally { 
         if (rt.isPlaying()) 
          rt.stop(); 

        } 
       } 
      }; 
      myThread.start(); 
+1

我會優先考慮不這樣做...... – jobe

0

我找到了另一個解決方案,我設置了notification.sound = uri; ,不要再使用RingtoneManager了。

with notification.flags | = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE;

但歌曲仍然循環播放。也許鈴聲真的是5分鐘?或者是否可以將鈴聲配置爲循環歌曲?

+0

或者是使用MediaPlayer和setLoop(false)的解決方案嗎? – jobe

+0

如果你的手機鈴聲很小,並且確實在循環運行,你可以有效地使用mPlayer.setLoop(false)。它曾爲我工作 –

+0

它不適合我。我使用mp.setDataSource(鈴聲); mp.setLooping(假); mp.prepare()和mp.start();鈴聲在循環播放... – jobe

1

嘗試添加以下行。

ringtoneManager.stopPreviousRingtone(); 
+0

爲什麼?在哪裏?那會阻止我的鈴聲... – jobe