如何解决背景音乐播放器
我正在制作音乐应用,但在后台播放音乐时遇到问题。 当然它可以正常工作,但是当应用程序处于非活动状态时它会停止。我尝试了所有我能找到的方法。 我不知道为什么它没有因为我按我应该的方式使用服务。
这里的代码:
播放器片段:
public class PlayerFragment extends Fragment {
private FirebaseStorage storage;
private ImageButton main_btn,next_btn,back_btn,fav_btn,settings_btn;
private Uri localSong;
private Intent myService;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_player,container,false);
storage = FirebaseStorage.getInstance();
main_btn= view.findViewById(R.id.player_main_btn);
next_btn= view.findViewById(R.id.player_next_btn);
back_btn= view.findViewById(R.id.player_back_btn);
fav_btn = view.findViewById(R.id.player_song_fav_btn);
settings_btn = view.findViewById(R.id.player_song_options_btn);
storage.getReference().child("songs/ni_bien_ni_mal.mp3").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
localSong=uri;
}
});
MainActivity mainActivity = (MainActivity) getActivity();
myService = new Intent(getActivity(),BackgroundSoundService.class);
main_btn.setonClickListener(v -> {
if( main_btn.getDrawable().getConstantState().equals( main_btn.getContext().getDrawable(R.drawable.ic_play).getConstantState()))
{
new Thread(new Runnable() {
@Override
public void run() {
myService.putExtra("uri",localSong.toString() );
mainActivity.startService(myService);
}
}).start();
main_btn.setimageResource(R.drawable.ic_pause);
}
else
{
new Thread(new Runnable() {
@Override
public void run() {
// mainActivity.stopService(myService);
main_btn.setimageResource(R.drawable.ic_play);
}
}).start();
}
});
fav_btn.setonClickListener(v->{
if( fav_btn.getDrawable().getConstantState().equals( fav_btn.getContext().getDrawable(R.drawable.ic_heart_empty).getConstantState()))
{
fav_btn.setimageResource(R.drawable.ic_heart_full);
}else{
fav_btn.setimageResource(R.drawable.ic_heart_empty);
}
});
return view;
}
}
服务:
public class BackgroundSoundService extends Service {
String song_string;
int x;
private static final String TAG = "BackgroundSoundService";
MediaPlayer player;
public IBinder onBind(Intent arg0) {
Log.i(TAG,"onBind()" );
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onStart(Intent intent,int startId) {
super.onStart(intent,startId);
}
public int onStartCommand(Intent intent,int flags,int startId) {
song_string= intent.getStringExtra("uri");
if (song_string != null) {
System.out.println("Song string : " + song_string);
player = MediaPlayer.create(this,Uri.parse(song_string));
player.setLooping(false); // Set looping
player.setVolume(0.5f,0.5f);
if (!(String.valueOf(x) == null || String.valueOf(x).isEmpty())) {
player.seekTo(x);
}
player.start();
}
return Service.START_STICKY;
}
public IBinder onUnBind(Intent arg0) {
Log.i(TAG,"onUnBind()");
return null;
}
public void onStop() {
Log.i(TAG,"onStop()");
}
public void onPause() {
Log.i(TAG,"onPause()");
x=player.getCurrentPosition();
player.pause();
}
@Override
public void onDestroy() {
if(player!=null) {
player.stop();
player.reset();
player.release();
Log.i(TAG,"onCreate(),service stopped...");
}
}
@Override
public void onLowMemory() {
Log.i(TAG,"onLowMemory()");
}
}
提前非常感谢您的帮助。
解决方法
看看这个项目,它是由 google 维护的,它将向您展示创建 android 音乐播放器应用程序的正确方法。 https://github.com/android/uamp
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。