单击后退按钮,MediaPlayer 崩溃 Android
click on back button and MediaPlayer crash Android
对于 MediaPlayer,我参考了 http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/。
我已经为 Media Player 创建了 activity,它具有播放、暂停、下一个、上一个、搜索栏等所有功能,还包括 OnCompletionListener
。一切都很好。但是现在我希望一切都应该由服务来管理。
我已经创建了 MyService Class :
public class MusicPlayerService extends Service {
MediaPlayer mp;
String fullStreamUrl;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mp = new MediaPlayer();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
fullStreamUrl = intent.getStringExtra("fullStreamUrl");
// Log.d("url", "Geturl:- " + fullStreamUrl);
}
try {
mp.reset();
mp.setDataSource(fullStreamUrl);
mp.prepareAsync();
mp.start();
mp.setLooping(true);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
@Override
public void onDestroy() {
mp.release();
super.onDestroy();
}
}
如何使用服务和 currentsongIndex 管理所有功能。
谢谢。请解开我的疑惑。我很困惑。
在 onDestroy() 上尝试
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mp.stop();
}
尝试浏览您的 logcat 消息或将其粘贴到此处以便我们能够追踪错误。
使用服务在后台管理来自 Activity 的 MediaPlayer
,即 运行。您应该创建一些命令,这些命令将在 next
、previous
和 seekbar
操作发生在 Activity.
时广播
如果服务在同一进程中 运行,则使用 LocalBroadcastManager
否则 BroadcastReceiver
从 Activity.
获取事件
例如:
1. 为服务中的下一个、上一个……操作创建操作:
public static String STR_NEXT="MusicPlayerService.NEXT";
public static String STR_PREV="MusicPlayerService.PREV";
2. 向 onCreate
中的所有 Action 注册接收器:
@Override
public void onCreate() {
super.onCreate();
mp = new MediaPlayer();
IntentFilter filter = new IntentFilter();
filter.addAction(STR_NEXT);
filter.addAction(STR_PREV);
LocalBroadcastManager.getInstance(this).
registerReceiver(mediaAction,filter);
}
private BroadcastReceiver mediaAction = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(STR_NEXT)){
forwardClick();
}
// do same for other actions
}
};
3.在Service中创建方法进行下一步操作:
public void forwardClick(){
int currentPosition = mp.getCurrentPosition();
if(currentPosition + seekForwardTime <= mp.getDuration()){
mp.seekTo(currentPosition + seekForwardTime);
}else{
mp.seekTo(mp.getDuration());
}
}
以同样的方式创建其他方法。
4. 从 Activity 按钮上单击发送广播并执行所需的操作:
btnForward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MusicPlayerService.STR_NEXT);
LocalBroadcastManager.getInstance(
view.getContext()).sendBroadcast(intent);
}
});
其他动作同理发送广播
对于 MediaPlayer,我参考了 http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/。
我已经为 Media Player 创建了 activity,它具有播放、暂停、下一个、上一个、搜索栏等所有功能,还包括 OnCompletionListener
。一切都很好。但是现在我希望一切都应该由服务来管理。
我已经创建了 MyService Class :
public class MusicPlayerService extends Service {
MediaPlayer mp;
String fullStreamUrl;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mp = new MediaPlayer();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
fullStreamUrl = intent.getStringExtra("fullStreamUrl");
// Log.d("url", "Geturl:- " + fullStreamUrl);
}
try {
mp.reset();
mp.setDataSource(fullStreamUrl);
mp.prepareAsync();
mp.start();
mp.setLooping(true);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
@Override
public void onDestroy() {
mp.release();
super.onDestroy();
}
}
如何使用服务和 currentsongIndex 管理所有功能。 谢谢。请解开我的疑惑。我很困惑。
在 onDestroy() 上尝试
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mp.stop();
}
尝试浏览您的 logcat 消息或将其粘贴到此处以便我们能够追踪错误。
使用服务在后台管理来自 Activity 的 MediaPlayer
,即 运行。您应该创建一些命令,这些命令将在 next
、previous
和 seekbar
操作发生在 Activity.
如果服务在同一进程中 运行,则使用 LocalBroadcastManager
否则 BroadcastReceiver
从 Activity.
例如:
1. 为服务中的下一个、上一个……操作创建操作:
public static String STR_NEXT="MusicPlayerService.NEXT";
public static String STR_PREV="MusicPlayerService.PREV";
2. 向 onCreate
中的所有 Action 注册接收器:
@Override
public void onCreate() {
super.onCreate();
mp = new MediaPlayer();
IntentFilter filter = new IntentFilter();
filter.addAction(STR_NEXT);
filter.addAction(STR_PREV);
LocalBroadcastManager.getInstance(this).
registerReceiver(mediaAction,filter);
}
private BroadcastReceiver mediaAction = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(STR_NEXT)){
forwardClick();
}
// do same for other actions
}
};
3.在Service中创建方法进行下一步操作:
public void forwardClick(){
int currentPosition = mp.getCurrentPosition();
if(currentPosition + seekForwardTime <= mp.getDuration()){
mp.seekTo(currentPosition + seekForwardTime);
}else{
mp.seekTo(mp.getDuration());
}
}
以同样的方式创建其他方法。
4. 从 Activity 按钮上单击发送广播并执行所需的操作:
btnForward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MusicPlayerService.STR_NEXT);
LocalBroadcastManager.getInstance(
view.getContext()).sendBroadcast(intent);
}
});
其他动作同理发送广播