2017-10-24 15 views
5

मैं वर्तमान में चैट एप्लिकेशन पर काम कर रहा हूं। इसमें वॉयस नोट भेजने की सुविधा है। आवाज नोट्स भेजने और बजाना ठीक काम कर रहा है। लेकिन समस्या यह है कि जब मैं आवाज नोट्स चलाता हूं, तो पिछली आवाज नोट्स रुकने नहीं खेलती हैं .. दोनों एक साथ खेल रहे हैं।mediaplayer.is प्लेइंग हमेशा झूठी हो जाती है

यहाँ खेलने वॉइस नोट के लिए अपने कोड

public static class MessageViewHolder extends RecyclerView.ViewHolder { 

    private TextView messageTextView; 
    private ImageView messageImageView; 
    private TextView timeTextView; 
    private LinearLayout textMessageLayout; 
    private TextView messengerNameTextView; 
    private CircleImageView messengerPhotoImageView; 
    ImageView leftQuackImage, rightQuackImage; 
    private LinearLayout voiceNotesLayout; 
    private ImageView playImageView, stopImageView; 
    private SeekBar progressSeekbar; 

    private MediaPlayer mPlayer; 
    double timeElapsed = 0, finalTime = 0; 
    Handler durationHandler = new Handler(); 
    Runnable updateSeekBarTime; 
    boolean isPlaying; 

    public MessageViewHolder(View itemView) { 
     super(itemView); 
     messageTextView = (TextView) itemView.findViewById(R.id.messageTextView); 
     messageImageView = (ImageView) itemView.findViewById(R.id.messageImageView); 
     timeTextView = (TextView) itemView.findViewById(R.id.timeTextView); 
     textMessageLayout = (LinearLayout) itemView.findViewById(R.id.textMessageLayout); 
     messengerNameTextView = (TextView) itemView.findViewById(R.id.messengerTextView); 
     messengerPhotoImageView = (CircleImageView) itemView.findViewById(R.id.messengerImageView); 
     leftQuackImage = (ImageView) itemView.findViewById(R.id.leftQuackImage); 
     rightQuackImage = (ImageView) itemView.findViewById(R.id.rightQuackImage); 
     voiceNotesLayout = (LinearLayout) itemView.findViewById(R.id.voiceNotesLayout); 
     playImageView = (ImageView) itemView.findViewById(R.id.playImageView); 
     stopImageView = (ImageView) itemView.findViewById(R.id.stopImageView); 
     progressSeekbar = (SeekBar) itemView.findViewById(R.id.progressSeekbar); 
     isPlaying = false; 
     mPlayer = new MediaPlayer(); 
    } 
    public void setupAudioPlay(final long duration, final String url){ 
     progressSeekbar.setMax((int) duration); 
     progressSeekbar.setClickable(false); 
     mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     try { 
      mPlayer.setDataSource(url); 
      mPlayer.prepareAsync(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }catch (IllegalStateException e){ 
      e.printStackTrace(); 
     } 

     playImageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Log.e("Media player","isPlaying"+mPlayer.isPlaying()+isPlaying); 
       if (mPlayer.isPlaying()) { 
        mPlayer.stop(); 
        mPlayer.release(); 
        mPlayer = null; 
       } 
       if (!isPlaying) { 
        isPlaying = true; 
        mPlayer.start(); 
        playImageView.setVisibility(View.GONE); 
        stopImageView.setVisibility(View.VISIBLE); 
        timeElapsed = mPlayer.getCurrentPosition(); 
        progressSeekbar.setProgress((int) timeElapsed); 
        durationHandler.postDelayed(updateSeekBarTime, 100); 

       } else { 
        isPlaying = false; 
        mPlayer.pause(); 
       } 
      } 
     }); 

     stopImageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (isPlaying) { 
        if (stopPlaying()) { 
         playImageView.setVisibility(View.VISIBLE); 
         stopImageView.setVisibility(View.GONE); 
        } 
       } 
      } 
     }); 

     mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       if (mp != null) { 
        mPlayer.seekTo(0); 
        isPlaying = false; 
        progressSeekbar.setProgress(0); 
       } 
       playImageView.setVisibility(View.VISIBLE); 
       stopImageView.setVisibility(View.GONE); 
      } 
     }); 

     updateSeekBarTime = new Runnable() { 
      public void run() { 
       if (mPlayer != null) { 
        if (mPlayer.isPlaying()) { 
         timeElapsed = mPlayer.getCurrentPosition(); 
         progressSeekbar.setProgress((int) timeElapsed); 
         durationHandler.postDelayed(this, 100); 
        } else { 
         mPlayer.pause(); 
         isPlaying = false; 
         progressSeekbar.setProgress(0); 
         playImageView.setVisibility(View.VISIBLE); 
         stopImageView.setVisibility(View.GONE); 
        } 
       } 
      } 
     }; 
    } 

    private boolean stopPlaying() { 
     mPlayer.pause(); 
     mPlayer.seekTo(0); 
     if (!mPlayer.isPlaying()) { 
      return true; 
     } 
     return false; 
    } 
} 

यहाँ mPlayer.isPlaying हमेशा गलत हो जाता है है।

कृपया मेरी मदद करें!

+0

क्या आप इसे 'this.setIsRecyclable (false) जोड़ सकते हैं;' MessageViewHolder कन्स्ट्रक्टर में और कोशिश करें –

उत्तर

3

पा सकते हैं:

जब रुकने के लिए कॉल() रिटर्न, मीडियापाला यार ऑब्जेक्ट रोके गए राज्य में प्रवेश करता है। ध्यान दें कि प्रारंभ किए गए राज्य से रोके गए राज्य में संक्रमण और इसके विपरीत खिलाड़ी इंजन में असीमित रूप से होता है। राज्य को कॉल करने के लिए कॉल करने में कुछ समय लग सकता है(), और स्ट्रीम की गई सामग्री के मामले में यह कई सेकंड हो सकता है।

यह मामला यहां हो सकता है। ध्वनि क्यों नहीं रुक रहा है और क्यों चल रहा है() सच हो रहा है अलग हो सकता है। उदाहरण के लिए, मीडियाप्लेयर के कई उदाहरण समानांतर में मौजूद हो सकते हैं, जिससे एमप्लेयर स्थिर इस तरह के विकल्प को बाहर कर देगा।

1

जब भी आवश्यक हो, आप सिस्टम ऑडियो स्थिति की जांच कर सकते हैं। आपके मामले में, जब भी प्ले बटन क्लिक किया जाता है तो नीचे दी गई स्थिति को पहले चेक किया जाना चाहिए।

AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE); 
if(manager.isMusicActive()) 
{ 
    // to do 
} 

में हिस्सा करने के लिए आप प्राथमिक कार्रवाई जो है को लागू करना चाहिए:

KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PAUSE); 
audioManager.dispatchMediaKeyEvent(event); 

आप documentation से पूरे प्रलेखन here

संबंधित मुद्दे