【发布时间】:2015-03-12 20:46:41
【问题描述】:
我正在创建一个 android 应用程序(供我自己使用),让我可以聆听 GTA V 中我最喜欢的歌曲。 媒体播放器从我的 Dropbox 帐户流式传输 mp3 曲目,这一切都很好。
问题是,在第一首歌曲播放完毕后,我希望它播放下一首歌曲,但是当我在第一首歌曲播放完毕后运行应用程序时,应用程序崩溃而不是播放列表中的下一首歌曲。
有人可以帮我解决我遇到的这个问题吗?
谢谢。
代码
public class channelx extends Activity implements MediaPlayer.OnPreparedListener {
Button play, pause, home, refresh;
protected Dialog mSplashDialog;
private int playlistPos = 0;
private List<Uri> myUris = new ArrayList<Uri>();
private MediaPlayer sdrPlayer = new MediaPlayer();
/** Called when the activity is first created. */@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.channelx);
final ProgressDialog progressDialog = new ProgressDialog(channelx.this);
progressDialog.setCancelable(false);
progressDialog.setIndeterminate(true);
progressDialog.setMessage("Loading...");
progressDialog.show();
final Timer t = new Timer();
t.schedule(new TimerTask() {
public void run() {
progressDialog.dismiss();
t.cancel();
}
}, 5000);
play = (Button) findViewById(R.id.play);
pause = (Button) findViewById(R.id.pause);
home = (Button) findViewById(R.id.home);
refresh = (Button) findViewById(R.id.refresh);
myUris.add(Uri.parse("https://db.tt/4ANlGRms"));
myUris.add(Uri.parse("https://db.tt/TpmxsqGJ"));
myUris.add(Uri.parse("https://db.tt/rbkYtuNI"));
myUris.add(Uri.parse("https://db.tt/JYVHp9nm"));
myUris.add(Uri.parse("https://db.tt/xWLATUQp"));
myUris.add(Uri.parse("https://db.tt/WzV2TzFu"));
// Add the others as well...
initSong(myUris.get(playlistPos));
sdrPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
sdrPlayer.reset();
playlistPos++;
initSong(myUris.get(playlistPos));
sdrPlayer.start(); // Start it as well if you wish
}
});
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sdrPlayer.start();
}
}
);
pause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sdrPlayer.pause();
}
});
home.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder1 = new AlertDialog.Builder(channelx.this);
builder1.setMessage("Are you sure you want to leave this station? Playback will be stopped.");
builder1.setCancelable(true);
builder1.setPositiveButton("Continue",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
sdrPlayer.stop();
Intent intent = new Intent(channelx.this, MainActivity.class);
startActivity(intent);
}
});
builder1.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert11 = builder1.create();
alert11.show();
}
});
refresh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
sdrPlayer.stop();
Intent intent = new Intent(channelx.this, channelx.class);
startActivity(intent);
}
});
}
@Override
public void onPrepared(MediaPlayer mp) {
}
public void initSong(Uri myUri) {
try {
sdrPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
sdrPlayer.setDataSource(this, myUri);
sdrPlayer.prepareAsync(); // don't use prepareAsync for mp3 playback
}
catch (IOException e) {
e.printStackTrace();
Toast.makeText(channelx.this,
"Please turn on WiFi and try again",
Toast.LENGTH_LONG).show();
}
}
}
LogCat
05-26 15:37:14.574: D/MediaPlayer(16744): mIsAboveSense55:-1
05-26 15:37:14.574: D/MediaPlayer(16744): sense_version:5.5
05-26 15:37:14.574: D/MediaPlayer(16744): ver s1: 55000
05-26 15:37:14.574: D/MediaPlayer(16744): ver s2: 55000
05-26 15:37:14.664: V/MediaPlayer(16744): network type=wifi
05-26 15:37:14.664: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:37:14.694: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:37:14.694: I/MediaPlayer(16744): setLPAflag() in
05-26 15:37:14.704: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:37:14.704: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:37:14.704: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:37:14.704: I/MediaPlayer(16744): setLPAflag() out
05-26 15:37:14.754: D/MediaPlayer(16744): Mediaplayer receives message, message type: 8
05-26 15:37:22.833: W/MediaPlayer(16744): info/warning (1, 902)
05-26 15:37:22.833: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:22.833: D/MediaPlayer(16744): Mediaplayer receives message, message type: 5
05-26 15:37:22.833: D/MediaPlayer(16744): Mediaplayer receives message, message type: 1
05-26 15:37:22.853: E/MediaPlayer(16744): Should have subtitle controller already set
05-26 15:37:24.044: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:37:24.044: D/[MediaPluginDLNA](16744): not in Mirror mode
05-26 15:37:24.044: D/MediaPlayer(16744): doStart() in
05-26 15:37:24.044: D/MediaPlayer(16744): Htc_getIntParameter = 902
05-26 15:37:24.184: D/MediaPlayer(16744): Mediaplayer receives message, message type: 6
05-26 15:37:25.115: D/MediaPlayer(16744): Mediaplayer receives message, message type: 7
05-26 15:37:26.176: W/MediaPlayer(16744): info/warning (703, 0)
05-26 15:37:26.176: W/MediaPlayer(16744): info/warning (701, 0)
05-26 15:37:26.176: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:26.186: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:27.177: W/MediaPlayer(16744): info/warning (702, 0)
05-26 15:37:27.207: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:28.238: D/MediaPlayer(16744): Mediaplayer receives message, message type: 7
05-26 15:37:29.370: W/MediaPlayer(16744): info/warning (703, 0)
05-26 15:37:29.370: W/MediaPlayer(16744): info/warning (701, 0)
05-26 15:37:29.370: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:29.370: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:30.391: W/MediaPlayer(16744): info/warning (702, 0)
05-26 15:37:30.401: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:31.412: D/MediaPlayer(16744): Mediaplayer receives message, message type: 7
05-26 15:37:31.612: W/MediaPlayer(16744): info/warning (703, 0)
05-26 15:37:31.612: W/MediaPlayer(16744): info/warning (701, 0)
05-26 15:37:31.612: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:31.612: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:37:32.433: W/MediaPlayer(16744): info/warning (702, 0)
05-26 15:37:32.433: D/MediaPlayer(16744): Mediaplayer receives message, message type: 200
05-26 15:39:16.584: D/MediaPlayer(16744): Mediaplayer receives message, message type: 7
05-26 15:39:16.764: E/MediaPlayer(16744): internal/external state mismatch corrected
05-26 15:39:16.774: D/MediaPlayer(16744): Mediaplayer receives message, message type: 2
05-26 15:39:16.774: D/MediaPlayer(16744): reset() in
05-26 15:39:16.814: D/MediaPlayer(16744): reset() out
05-26 15:39:16.814: D/MediaPlayer(16744): reset() out
05-26 15:39:16.824: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.864: V/MediaPlayer(16744): network type=wifi
05-26 15:39:16.864: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.894: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:16.894: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:16.894: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:16.904: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:16.904: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:16.904: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:16.904: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:16.904: D/MediaPlayer(16744): doStart() in
05-26 15:39:16.904: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:16.904: E/MediaPlayer(16744): start called in state 4
05-26 15:39:16.904: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:16.904: D/MediaPlayer(16744): start() out
05-26 15:39:16.904: D/MediaPlayer(16744): U58 Send PlaybackCompleteEvent
05-26 15:39:16.924: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:16.924: E/MediaPlayer(16744): Error (-38,0)
05-26 15:39:16.924: D/MediaPlayer(16744): reset() in
05-26 15:39:16.924: D/MediaPlayer(16744): reset() out
05-26 15:39:16.924: D/MediaPlayer(16744): reset() out
05-26 15:39:16.934: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:16.934: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.934: V/MediaPlayer(16744): network type=wifi
05-26 15:39:16.934: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.934: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:16.934: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:16.934: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:16.934: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:16.934: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:16.934: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:16.934: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:16.934: D/MediaPlayer(16744): doStart() in
05-26 15:39:16.944: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:16.944: E/MediaPlayer(16744): start called in state 4
05-26 15:39:16.944: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:16.944: D/MediaPlayer(16744): start() out
05-26 15:39:16.944: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:16.944: E/MediaPlayer(16744): Error (1,-107)
05-26 15:39:16.944: D/MediaPlayer(16744): reset() in
05-26 15:39:16.944: D/MediaPlayer(16744): reset() out
05-26 15:39:16.944: D/MediaPlayer(16744): reset() out
05-26 15:39:16.944: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.944: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:16.955: V/MediaPlayer(16744): network type=wifi
05-26 15:39:16.955: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.965: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:16.965: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:16.965: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:16.975: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:16.975: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:16.975: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:16.975: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:16.975: D/MediaPlayer(16744): doStart() in
05-26 15:39:16.975: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:16.975: E/MediaPlayer(16744): start called in state 4
05-26 15:39:16.975: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:16.975: D/MediaPlayer(16744): start() out
05-26 15:39:16.975: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:16.975: E/MediaPlayer(16744): Error (1,-107)
05-26 15:39:16.975: D/MediaPlayer(16744): reset() in
05-26 15:39:16.975: D/MediaPlayer(16744): reset() out
05-26 15:39:16.975: D/MediaPlayer(16744): reset() out
05-26 15:39:16.975: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.985: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:16.985: V/MediaPlayer(16744): network type=wifi
05-26 15:39:16.985: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:16.995: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:16.995: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:16.995: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:16.995: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:16.995: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:16.995: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:17.005: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:17.005: D/MediaPlayer(16744): doStart() in
05-26 15:39:17.005: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:17.005: E/MediaPlayer(16744): start called in state 4
05-26 15:39:17.005: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:17.005: D/MediaPlayer(16744): start() out
05-26 15:39:17.005: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:17.005: E/MediaPlayer(16744): Error (1,-107)
05-26 15:39:17.005: D/MediaPlayer(16744): reset() in
05-26 15:39:17.005: D/MediaPlayer(16744): reset() out
05-26 15:39:17.005: D/MediaPlayer(16744): reset() out
05-26 15:39:17.005: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:17.015: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:17.015: V/MediaPlayer(16744): network type=wifi
05-26 15:39:17.015: D/MediaPlayer(16744): mIsAboveSense55:1
05-26 15:39:17.015: D/MediaPlayer(16744): Couldn't open file on client side, trying server side
05-26 15:39:17.025: I/MediaPlayer(16744): setLPAflag() in
05-26 15:39:17.025: D/MediaPlayer(16744): SystemProperties.get htc.audio.mirrorlink.status:
05-26 15:39:17.025: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false +
05-26 15:39:17.025: D/MediaPlayer(16744): set AwesomePlayer LPA flag to false -
05-26 15:39:17.025: I/MediaPlayer(16744): setLPAflag() out
05-26 15:39:17.025: D/[MediaPluginDLNA](16744): [getIsRegionSupported] sRegionCode: 6
05-26 15:39:17.025: D/MediaPlayer(16744): doStart() in
05-26 15:39:17.025: D/MediaPlayer(16744): Htc_getIntParameter = 0
05-26 15:39:17.025: E/MediaPlayer(16744): start called in state 4
05-26 15:39:17.025: E/MediaPlayer(16744): error (-38, 0)
05-26 15:39:17.025: D/MediaPlayer(16744): start() out
05-26 15:39:17.025: D/MediaPlayer(16744): Mediaplayer receives message, message type: 100
05-26 15:39:17.025: E/MediaPlayer(16744): Error (1,-107)
05-26 15:39:17.025: D/MediaPlayer(16744): reset() in
05-26 15:39:17.035: D/MediaPlayer(16744): reset() out
05-26 15:39:17.035: D/MediaPlayer(16744): reset() out
05-26 15:39:17.035: W/dalvikvm(16744): threadid=1: thread exiting with uncaught exception (group=0x4167de18)
05-26 15:39:17.035: E/MediaPlayer(16744): error (1, -107)
05-26 15:39:17.045: E/AndroidRuntime(16744): FATAL EXCEPTION: main
05-26 15:39:17.045: E/AndroidRuntime(16744): Process: com.example.gtavradio, PID: 16744
05-26 15:39:17.045: E/AndroidRuntime(16744): java.lang.IndexOutOfBoundsException: Invalid index 6, size is 6
05-26 15:39:17.045: E/AndroidRuntime(16744): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
05-26 15:39:17.045: E/AndroidRuntime(16744): at java.util.ArrayList.get(ArrayList.java:308)
05-26 15:39:17.045: E/AndroidRuntime(16744): at com.example.gtavradio.channelx$2.onCompletion(channelx.java:75)
05-26 15:39:17.045: E/AndroidRuntime(16744): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3162)
05-26 15:39:17.045: E/AndroidRuntime(16744): at android.os.Handler.dispatchMessage(Handler.java:102)
05-26 15:39:17.045: E/AndroidRuntime(16744): at android.os.Looper.loop(Looper.java:157)
05-26 15:39:17.045: E/AndroidRuntime(16744): at android.app.ActivityThread.main(ActivityThread.java:5872)
05-26 15:39:17.045: E/AndroidRuntime(16744): at java.lang.reflect.Method.invokeNative(Native Method)
05-26 15:39:17.045: E/AndroidRuntime(16744): at java.lang.reflect.Method.invoke(Method.java:515)
05-26 15:39:17.045: E/AndroidRuntime(16744): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
05-26 15:39:17.045: E/AndroidRuntime(16744): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
05-26 15:39:17.045: E/AndroidRuntime(16744): at dalvik.system.NativeStart.main(Native Method)
05-26 15:39:19.918: D/Process(16744): killProcess, pid=16744
05-26 15:39:19.918: D/Process(16744): com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException:131 java.lang.ThreadGroup.uncaughtException:693 java.lang.ThreadGroup.uncaughtException:690
编辑:忽略对我的代码的一些愚蠢评论
新日志
05-26 16:20:11.884: E/MediaPlayer(1530): attachNewPlayer called in state 128
05-26 16:20:11.884: W/dalvikvm(1530): threadid=1: thread exiting with uncaught exception (group=0x4167de18)
05-26 16:20:11.904: E/AndroidRuntime(1530): FATAL EXCEPTION: main
05-26 16:20:11.904: E/AndroidRuntime(1530): Process: com.example.gtavradio, PID: 1530
05-26 16:20:11.904: E/AndroidRuntime(1530): java.lang.IllegalStateException
05-26 16:20:11.904: E/AndroidRuntime(1530): at android.media.MediaPlayer._setDataSource(Native Method)
05-26 16:20:11.904: E/AndroidRuntime(1530): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1236)
05-26 16:20:11.904: E/AndroidRuntime(1530): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1203)
05-26 16:20:11.904: E/AndroidRuntime(1530): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1137)
05-26 16:20:11.904: E/AndroidRuntime(1530): at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1032)
05-26 16:20:11.904: E/AndroidRuntime(1530): at com.example.gtavradio.channelx.initSong(channelx.java:155)
05-26 16:20:11.904: E/AndroidRuntime(1530): at com.example.gtavradio.channelx$2.onCompletion(channelx.java:78)
05-26 16:20:11.904: E/AndroidRuntime(1530): at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3089)
05-26 16:20:11.904: E/AndroidRuntime(1530): at android.os.Handler.dispatchMessage(Handler.java:102)
05-26 16:20:11.904: E/AndroidRuntime(1530): at android.os.Looper.loop(Looper.java:157)
05-26 16:20:11.904: E/AndroidRuntime(1530): at android.app.ActivityThread.main(ActivityThread.java:5872)
05-26 16:20:11.904: E/AndroidRuntime(1530): at java.lang.reflect.Method.invokeNative(Native Method)
05-26 16:20:11.904: E/AndroidRuntime(1530): at java.lang.reflect.Method.invoke(Method.java:515)
05-26 16:20:11.904: E/AndroidRuntime(1530): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
05-26 16:20:11.904: E/AndroidRuntime(1530): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
05-26 16:20:11.904: E/AndroidRuntime(1530): at dalvik.system.NativeStart.main(Native Method)
现在编辑此代码不会使应用程序崩溃,但它仍然不会自动播放下一首歌曲,我必须重新按下播放才能让它播放下一首歌曲
sdrPlayer.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
sdrPlayer.stop();
sdrPlayer.reset();
playlistPos++;
if (playlistPos == myUris.size()) {
playlistPos = 0;
}
initSong(myUris.get(playlistPos));
//sdrPlayer.start(); // Start it as well if you wish
}
});
【问题讨论】:
标签: java android media-player