Android背景音乐服务

问题描述:

我正在开发android中的娱乐应用程序。我想播放背景音乐,我想为此使用服务。应用程序有3项活动,音乐必须在所有活动中播放。另外,当活动暂停时,音乐必须暂停并在被销毁时停止。谁能告诉我如何做到这一点?任何链接或例子?Android背景音乐服务

谢谢。

做没有服务

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

如果你这么认真使用媒体播放器

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相服务做打电话的容易程度这服务清单 确保有在.BackgroundSoundService串

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

谢谢你,真的帮助我! :) – rohit

+0

为什么你不喜欢服务是控制。 ? – rohit

+0

谢谢!工作正常,但我有这个代码的问题。在我的应用程序中,我有很多活动,但我已经在onPause()中声明了finish()。我想通过意图播放bgm,但意图调用onpause和服务停止(在onpause方法中cz完成方法)。您有任何解决方案吗? – Hassy31

关于这个问题,Theres关于这个问题的一个很好的教程在HelloAndroid。事实上,这是我在谷歌上第一次打。在问这里之前,你应该尝试用谷歌搜索,因为这是一个好习惯。

我有问题,运行它的末尾没有空间,我做一些改变与MP3音源运行它。这里是BackfrounSoundService.java文件。考虑一下我的mp3文件是在我的手机中的SD卡上。

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() { 

    } 
} 

@ Synxmax的答案使用ServiceMediaPlayer类时是正确的,但还需要申报清单中的Service这个工作,像这样:

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

太晚对于这里的派对,但我仍然会增加我的0.02美元,谷歌已经发布了一个名为通用音乐播放器的免费样本,通过它您可以学习在所有Android平台(汽车,手表,手机,电视......)上播放音乐,它使用服务播放音乐在后台,检查出来非常有帮助。这里是该项目的链接
https://github.com/googlesamples/android-UniversalMusicPlayer

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; 
} 

然后可以从任何活动调用播放一些音乐

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) 

您可以绑定到使用bindService服务和使服务暂停/从相应的活动的生命周期方法停止。

这里有一个很好的教程关于Playing music in the background on Android