26

Tôi đang phát triển một ứng dụng giải trí trong Android. Tôi muốn chơi nhạc nền và tôi muốn sử dụng dịch vụ đó. Ứng dụng có 3 hoạt động và âm nhạc phải được phát trên tất cả các hoạt động. Ngoài ra, khi hoạt động bị tạm dừng, nhạc phải PAUSE và dừng lại khi bị hủy. Bất cứ ai có thể cho tôi biết làm thế nào để làm điều này? bất kỳ liên kết hoặc ví dụ nào?Dịch vụ nhạc nền Android

Cảm ơn bạn.

Trả lời

48

Làm điều đó không có dịch vụ

http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

Nếu bạn đang rất nghiêm túc về làm việc đó với các dịch vụ sử dụng MediaPlayer

Intent svc=new Intent(this, BackgroundSoundService.class); 
startService(svc); 

public class BackgroundSoundService extends Service { 
    private static final String TAG = null; 
    MediaPlayer player; 
    public IBinder onBind(Intent arg0) { 

     return null; 
    } 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     player = MediaPlayer.create(this, R.raw.idil); 
     player.setLooping(true); // Set looping 
     player.setVolume(100,100); 

    } 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     player.start(); 
     return 1; 
    } 

    public void onStart(Intent intent, int startId) { 
     // TO DO 
    } 
    public IBinder onUnBind(Intent arg0) { 
     // TO DO Auto-generated method 
     return null; 
    } 

    public void onStop() { 

    } 
    public void onPause() { 

    } 
    @Override 
    public void onDestroy() { 
     player.stop(); 
     player.release(); 
    } 

    @Override 
    public void onLowMemory() { 

    } 
} 

Pl Dễ gọi dịch vụ này trong Manifest Hãy chắc chắn rằng không có không gian ở phần cuối của chuỗi .BackgroundSoundService

<service android:enabled="true" android:name=".BackgroundSoundService" /> 
+3

Cảm ơn bạn, điều đó thực sự đã giúp tôi! :) – rohit

+0

Tại sao bạn không thích dịch vụ đó là để kiểm soát. ? – rohit

+0

cảm ơn bạn! hoạt động tốt nhưng tôi có một vấn đề với code.in ứng dụng của tôi Tôi có nhiều hoạt động nhưng tôi đã tuyên bố kết thúc() trong onPause().Tôi muốn chơi BGM trong khi đi qua ý định nhưng ý định cuộc gọi onpause và dừng dịch vụ (phương pháp kết thúc cz trong phương pháp onpause) .do bạn có bất kỳ giải pháp? – Hassy31

6

Có hướng dẫn tuyệt vời về chủ đề này tại HelloAndroid về chủ đề này. Infact nó là hit đầu tiên tôi nhận được trên google. Bạn nên thử googling trước khi yêu cầu ở đây, vì nó là thực hành tốt.

4

tôi đã có vấn đề để chạy nó và tôi thực hiện một số thay đổi để chạy nó với nguồn mp3. ở đây là BackfrounSoundService.java tệp. xem xét rằng tập tin mp3 của tôi là trong sdcard của tôi trong điện thoại của tôi.

public class BackgroundSoundService extends Service { 
    private static final String TAG = null; 
    MediaPlayer player; 

    public IBinder onBind(Intent arg0) { 

     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.d("service", "onCreate"); 
     player = new MediaPlayer(); 
     try { 
      player.setDataSource(Environment.getExternalStorageDirectory().getAbsolutePath() + "/your file.mp3"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     player.setLooping(true); // Set looping 
     player.setVolume(100, 100); 

    } 

    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d("service", "onStartCommand"); 
     try { 
      player.prepare(); 
      player.start(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return 1; 
    } 

    public void onStart(Intent intent, int startId) { 
     // TO DO 
    } 

    public IBinder onUnBind(Intent arg0) { 
     // TO DO Auto-generated method 
     return null; 
    } 

    public void onStop() { 

    } 

    public void onPause() { 

    } 

    @Override 
    public void onDestroy() { 
     player.stop(); 
     player.release(); 
    } 

    @Override 
    public void onLowMemory() { 

    } 
} 
6

@ câu trả lời Synxmax là đúng khi sử dụng một Service và lớp MediaPlayer, tuy nhiên bạn cũng cần phải khai báo Service trong Manifest cho tiện làm việc, như vậy:

<service 
    android:enabled="true" 
    android:name="com.package.name.BackgroundSoundService" /> 
6

cách quá muộn cho bữa tiệc ở đây nhưng tôi vẫn sẽ thêm $ 0,02, Google đã phát hành một mẫu miễn phí có tên là trình phát nhạc phổ thông mà bạn có thể học nhạc trên tất cả các nền tảng Android (tự động, xem, di động, truyền hình ..). âm nhạc trong nền, hãy kiểm tra xem nó rất hữu ích. đây là liên kết đến dự án
https://github.com/googlesamples/android-UniversalMusicPlayer

1

Tạo dịch vụ nền trước với cờ START_STICKY.

@Override 
public int onStartCommand(Intent startIntent, int flags, int startId) { 
    if (startIntent != null) { 
     String action = startIntent.getAction(); 
     String command = startIntent.getStringExtra(CMD_NAME); 
     if (ACTION_CMD.equals(action)) { 
      if (CMD_PAUSE.equals(command)) { 
       if (mPlayback != null && mPlayback.isPlaying()) { 
        handlePauseRequest(); 
       } 
      } else if (CMD_PLAY.equals(command)) { 
       ArrayList<Track> queue = new ArrayList<>(); 
       for (Parcelable input : startIntent.getParcelableArrayListExtra(ARG_QUEUE)) { 
        queue.add((Track) Parcels.unwrap(input)); 
       } 
       int index = startIntent.getIntExtra(ARG_INDEX, 0); 
       playWithQueue(queue, index); 
      } 
     } 
    } 

    return START_STICKY; 
} 

này sau đó có thể được gọi từ bất kỳ hoạt động để chơi một số nhạc

Intent intent = new Intent(MusicService.ACTION_CMD, fileUrlToPlay, activity, MusicService::class.java) 
intent.putParcelableArrayListExtra(MusicService.ARG_QUEUE, tracks) 
intent.putExtra(MusicService.ARG_INDEX, position) 
intent.putExtra(MusicService.CMD_NAME, MusicService.CMD_PLAY) 
activity.startService(intent) 

Bạn có thể liên kết với các dịch vụ sử dụng bindService và để làm cho tạm dừng dịch vụ/dừng từ các phương pháp vòng đời hoạt động tương ứng.

Đây là hướng dẫn hay về Playing music in the background on Android

Các vấn đề liên quan