2012-10-11 3 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

감사 - 나는 그것을 테스트하기 위해 지금 어떤 안드로이드 개발 설정이없는 미안 (여행을 ...) – dorjeduck