2017-10-25 31 views
0

이 코드를 확인하고 seekbar에 대해 도움을 요청하십시오. Seekbar가 작동하지 않습니다. 응용 프로그램에서 소스에서 오디오를 재생하려고하고 seekbar도 시도하고 있습니다. 그러나 검색 막대가 오디오와 함께 움직이지 않습니다. 파일.안드로이드 탐색 표시 줄이 온라인 스트리밍과 작동하지 않습니다

이 코드를 확인하고 seekbar에 대해 도움을 요청하십시오. Seekbar가 작동하지 않습니다. 응용 프로그램에서 소스에서 오디오를 재생하려고하는데 seekbar도 재생하려고합니다. 그러나 검색 막대가 오디오 파일로 이동하지 않습니다.

public class TrackDetailActivity extends AppCompatActivity { 

    private static final String TAG = "TrackDetailActivity"; 
    private TextView mArtistName, mTrackName; 
    private ImageView mAlbumArt; 

    private MediaPlayer mMediaPlayer; 
    private ImageView mPlayerPlay, mStopPlayer; 
    private SeekBar mSeekBar; 

    public static final String KEY_TRACK = "trackObj"; 


    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.track_detail_new); 


     mArtistName = (TextView) findViewById(R.id.tv_artist_name); 
     mTrackName = (TextView) findViewById(R.id.tv_track_name); 
     mAlbumArt = (ImageView) findViewById(R.id.iv_album_art); 
     mPlayerPlay = (ImageView) findViewById(R.id.playerControl); 
     mStopPlayer = (ImageView) findViewById(R.id.stopControl); 
     mSeekBar = (SeekBar) findViewById(R.id.seek); 

     Intent intent = getIntent(); 


     final Track track = (Track) intent.getSerializableExtra(TrackDetailActivity.KEY_TRACK); 

     String trackName = track.getTrackName(); 
     mTrackName.setText(trackName); 
     mArtistName.setText(track.getArtistName()); 
     Log.d(TAG, "onCreate: " + track.getDuration()); 


     GlideApp.with(this) 
       .asBitmap() 
       .load(track.getAlbumArtUrl()) 
       .centerCrop() 
       .listener(requestListener) 
       .into(mAlbumArt); 


     //Toast.makeText(this, "Track: " + track.getTrackName(), Toast.LENGTH_SHORT).show(); 

     mMediaPlayer = new MediaPlayer(); 
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

     mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mediaPlayer) { 
       mMediaPlayer.start(); 
       mSeekBar.setProgress(0); 
       mSeekBar.setMax(mediaPlayer.getDuration()); 

       Log.d(TAG, "onPrepared: Max Seek: " + mediaPlayer.getDuration()); 
       togglePlayPause(); 

      } 
     }); 


     mPlayerPlay.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       if (mMediaPlayer.isPlaying()) { 
        togglePlayPause(); 
        mMediaPlayer.stop(); 
        mMediaPlayer.reset(); 

       } else { 
        togglePlayPause(); 
        try { 
         mMediaPlayer.setDataSource(track.getPreviewUrl()); 
         mMediaPlayer.prepareAsync(); 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }); 
     Thread durationThread = new SeekThread(); 
     durationThread.start(); 


    } 

    public class SeekThread extends Thread { 
     @Override 
     public void run() { 
      try { 
       Thread.sleep(1000); 
       Log.d("SeekThread", "run: " + 1); 
       mSeekBar.setProgress(mMediaPlayer.getDuration()); 
       Log.d("SeekThread", "run: " + mMediaPlayer.getCurrentPosition()); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 


    private void togglePlayPause() { 
     if (mMediaPlayer.isPlaying()) { 
      mMediaPlayer.pause(); 
      mPlayerPlay.setImageResource(R.drawable.ic_action_play); 
     } else { 
      mMediaPlayer.start(); 
      mPlayerPlay.setImageResource(R.drawable.ic_pause); 

     } 
    } 


    private RequestListener<Bitmap> requestListener = new RequestListener<Bitmap>() { 
     @Override 
     public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) { 
      return false; 
     } 

     @Override 
     public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) { 
      setBlurredImage(resource); 
      return false; 
     } 
    }; 


    private void setBlurredImage(Bitmap source) { 
     Bitmap blurredBitmap = NativeStackBlur.process(source, 50); 

     ImageView screenBg = (ImageView) findViewById(R.id.screen_bg); 

     screenBg.setImageBitmap(blurredBitmap); 
    } 


} 
+0

검색 바둑판 스레드 수는 얼마입니까? mSeekBar.setProgress (mMediaPlayer.getDuration()); 어떤 숫자가 돌아 왔습니까? 너는 넣어 뒀다 로그에 의하여 검사 할 수 있는다 –

답변

0

다음 코드를 seekBar와 연결하면 작동합니다.

mSeekBar.setMax(mMediaPlayer.getDuration()); 
    new Timer().scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
      mSeekBar.setProgress(mMediaPlayer.getCurrentPosition()); 
     } 
    }, 0, 10); 

    mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 

      mMediaPlayer.seekTo(progress); 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 

     } 
    }); 
+0

고맙다, 나를 위해 일했다. –