2012-10-11 53 views
1

我尝试使用MediaPlayer类一次播放设备铃声(我不得不使用MediaPlayer,因为我在我的应用程序中使用铃声以及其他音频源)所以我尝试以下操作一个随机铃声,但我不能阻止它循环,它继续玩。 MediaPlayer只能播放一次铃声吗?android mediaplayer - 播放铃声一次

感谢

try { 
    RingtoneManager mRing = new RingtoneManager(RingtoneActivity.this); 
    int mNumberOfRingtones = mRing.getCursor().getCount(); 
    Uri mRingToneUri = mRing.getRingtoneUri((int) (Math.random() * mNumberOfRingtones)); 
    mMediaPlayer = new MediaPlayer(); 
    mMediaPlayer.setDataSource(RingtoneActivity.this, mRingToneUri); 
    mMediaPlayer.prepare(); 
    mMediaPlayer.setLooping(false); 
    mMediaPlayer.start(); 

} catch (Exception ignore) { 
} 

UPDATE:

我刚刚已经发布了与此相关的一个新的question,因为我是能够找到故障的具体原因在我的情况。

回答

9

我发现使用事件简单的解决方案 - 确认的答案,因为它解决您的问题:)

mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() { 
        @Override 
        public void onSeekComplete(MediaPlayer mediaPlayer) { 
         mediaPlayer.stop(); 
        } 
       }); 

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

记住释放()。

  mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
       @Override 
       public void onCompletion(MediaPlayer mediaPlayer) { 
        mediaPlayer.release(); 
       } 
      }); 

完整的代码,你想使用需要设置铃声到你想要的东西。

 AudioManager audioManager = (AudioManager)getSystemService(AUDIO_SERVICE); 
     int volume = audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION); 
     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(view.getContext()); 
     Uri notificationSoundUri = Uri.parse(prefs.getString("notification_sound", "DEFAULT_SOUND")); 

     MediaPlayer mediaPlayer = new MediaPlayer(); 
     try { 
      mediaPlayer.setDataSource(view.getContext(), notificationSoundUri); 
     } catch (Exception e1) { 
      e1.printStackTrace(); 
      mediaPlayer.release(); 
      return; 
     } 
     mediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION); 
     mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mediaPlayer) { 
       mediaPlayer.release(); 
      } 
     }); 
     try { 
      mediaPlayer.prepare(); 
     } catch (Exception e1) { 
      e1.printStackTrace(); 
      mediaPlayer.release(); 
      return; 
     } 
     mediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() { 

      @Override 
      public void onSeekComplete(MediaPlayer mediaPlayer) { 
       // TODO Auto-generated method stub 
       mediaPlayer.stop(); 
       mediaPlayer.start(); 
      } 
     }); 
     mediaPlayer.setVolume(volume, volume); 
     mediaPlayer.start(); 
0

使用通知

NotificationManager nManager = 
      (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);  
    NotificationCompat.Builder notifBuilder = 
      new NotificationCompat.Builder(context); 
    notifBuilder.setSound(sound); 
    notification = notifBuilder.build(); 

    nManager.notify(SOME_INT_CONSTANT, notification); 
+0

谢谢 - 对不起,我没有Android开发设置,现在对其进行测试(行驶...) – dorjeduck