微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

背景音乐播放器

如何解决背景音乐播放器

我正在制作音乐应用,但在后台播放音乐时遇到问题。 当然它可以正常工作,但是当应用程序处于非活动状态时它会停止。我尝试了所有我能找到的方法。 我不知道为什么它没有因为我按我应该的方式使用服务。

这里的代码

播放器片段:

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 举报,一经查实,本站将立刻删除。