背景音乐播放器

时间:2021-06-27 18:07:08

标签: android media audio-player

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

这里的代码:

播放器片段:

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()");
}


}

提前非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

看看这个项目,它是由 google 维护的,它将向您展示创建 android 音乐播放器应用程序的正确方法。 https://github.com/android/uamp