2017-08-08 5 views
0

は私の抜粋です:タイトルごとのようAndroid - MediaPlayer:別の方法(それは後で呼び出される)へのfastForwardの分離方法?ここで

public class MainActivity extends AppCompatActivity { 
private int seekForwardTime = 5000; 
private int seekBackwardTime = 5000; 

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


    seekForward.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick (View v) { 
      Toast.makeText(getApplicationContext(), "Seek Forward music", Toast.LENGTH_SHORT).show(); 
      forwardSong(mediaPlayer); 
     } 
    }); 
} 

public void forwardSong(MediaPlayer mediaPlayer) { 
    int currentPosition = mediaPlayer.getCurrentPosition(); 
    String tag2 = "currentPosition"; 
    Log.v(tag2, String.valueOf(mediaPlayer.getCurrentPosition())); 
    if (currentPosition + seekForwardTime <= mediaPlayer.getCurrentPosition()) { 
     mediaPlayer.seekTo(currentPosition + seekForwardTime); 
    } else { 
     String tag = "main activity"; 
     Log.v(tag, "else state"); 
     mediaPlayer.seekTo(mediaPlayer.getDuration()); 
    } 
} 

}

、私は早送り(各プレスのために前方に5秒を求めて)別の方法(forwardSong)へseekForward.OnClickListenerから行動を分けたいです。

しかし、シークするのではなくseekForwardをトリガすると、mediaPlayerが強制終了されます。だから私はもう一度 '再生'ボタンを押して曲の先頭から始める必要があります。

私は何かを見逃しましたか?私はどんな解決策やアドバイスをもらってうれしいです。

ps:Logステートメントを無視してください。私は以前にいくつかのテストを行っています。

ありがとうございます!


編集 - 2017年9月8日

要求されたとして、ここで私は混乱しているlogcat

08-09 16:36:01.688 2707-2707/? I/art: Not late-enabling -Xcheck:jni (already on) 
08-09 16:36:01.688 2707-2707/? W/art: Unexpected CPU variant for X86 using defaults: x86 
08-09 16:36:01.781 2707-2707/? W/System: ClassLoader referenced unknown path: /data/app/com.example.android.musicplayer-2/lib/x86 
08-09 16:36:01.791 2707-2707/? I/InstantRun: starting instant run server: is main process 
08-09 16:36:01.856 2707-2707/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
08-09 16:36:02.094 2707-2707/com.example.android.musicplayer D/MediaPlayer: setSubtitleAnchor in MediaPlayer 
08-09 16:36:02.189 2707-2730/com.example.android.musicplayer I/OpenGLRenderer: Initialized EGL, version 1.4 
08-09 16:36:02.189 2707-2730/com.example.android.musicplayer D/OpenGLRenderer: Swap behavior 1 
08-09 16:36:02.189 2707-2730/com.example.android.musicplayer W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 
08-09 16:36:02.189 2707-2730/com.example.android.musicplayer D/OpenGLRenderer: Swap behavior 0 
08-09 16:36:02.219 2707-2730/com.example.android.musicplayer D/EGL_emulation: eglCreateContext: 0xa1328e80: maj 2 min 0 rcv 2 
08-09 16:36:02.264 2707-2730/com.example.android.musicplayer D/EGL_emulation: eglMakeCurrent: 0xa1328e80: ver 2 0 (tinfo 0xa1320a20) 
08-09 16:36:02.333 2707-2707/com.example.android.musicplayer W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView 
08-09 16:36:02.343 2707-2730/com.example.android.musicplayer D/EGL_emulation: eglMakeCurrent: 0xa1328e80: ver 2 0 (tinfo 0xa1320a20) 
08-09 16:58:47.717 2707-2730/com.example.android.musicplayer D/EGL_emulation: eglMakeCurrent: 0xa1328e80: ver 2 0 (tinfo 0xa1320a20) 
08-09 16:58:47.747 2707-2730/com.example.android.musicplayer D/EGL_emulation: eglMakeCurrent: 0xa1328e80: ver 2 0 (tinfo 0xa1320a20) 
08-09 16:58:48.672 2707-2707/com.example.android.musicplayer V/currentPosition: 707 
08-09 16:58:48.673 2707-2707/com.example.android.musicplayer V/main activity: else state 
08-09 16:58:49.669 2707-2730/com.example.android.musicplayer D/EGL_emulation: eglMakeCurrent: 0xa1328e80: ver 2 0 (tinfo 0xa1320a20) 
08-09 16:58:50.684 2707-2730/com.example.android.musicplayer D/EGL_emulation: eglMakeCurrent: 0xa1328e80: ver 2 0 (tinfo 0xa1320a20) 
08-09 16:58:51.667 2707-2730/com.example.android.musicplayer D/EGL_emulation: eglMakeCurrent: 0xa1328e80: ver 2 0 (tinfo 0xa1320a20) 
08-09 16:58:53.631 2707-2730/com.example.android.musicplayer D/EGL_emulation: eglMakeCurrent: 0xa1328e80: ver 2 0 (tinfo 0xa1320a20) 

です。なぜそれが他の声明を入力しますか?

+0

あなたのlogcatを投稿してください。 – aborocz

+0

@aborocz Okが追加されました。私のポストをもう一度チェックしてください。 – yuri

+0

あなたのlogcatは必要ありませんでした。私の悪い。 – aborocz

答えて

1

は、次のようにあなたのforwardSong機能を変更します。

public void forwardSong(MediaPlayer mediaPlayer) { 
    int currentPosition = mediaPlayer.getCurrentPosition(); 
    String tag2 = "currentPosition"; 
    Log.v(tag2, String.valueOf(mediaPlayer.getCurrentPosition())); 
    if (currentPosition + seekForwardTime <= mediaPlayer.getDuration()) { 
     mediaPlayer.seekTo(currentPosition + seekForwardTime); 
    } else { 
     String tag = "main activity"; 
     Log.v(tag, "else state"); 
     mediaPlayer.seekTo(mediaPlayer.getDuration()); 
    } 
} 

以下の条件が問題であり、それは常にfalseとなり、mediaplayerは常にあるため、あなたのelse文のメディアファイルの末尾に努めてまいります。

if (currentPosition + seekForwardTime <= mediaPlayer.getCurrentPosition()) 
+0

ええ。私はLogからも気づいています。しかし、なぜそれが他の声明を入力しますか? if条件についてのアドバイスはありますか? if条件で別のメソッドを使用する必要がありますか? – yuri

+0

私はすでにifステートメントのソリューションを掲載しました。 'if(currentPosition + seekForwardTime <= mediaPlayer.getDuration()){' – aborocz

+0

ああ、申し訳ありません。私はその行に注意を払わなかった – yuri

関連する問題