我正在为我的网站制作一个android应用程序。它有一些视频有点像播客。我希望该应用程序能够在用户锁定屏幕或使用其他应用程序时在后台播放音频。为了实现这一点,我有一个WebView。为了提供上述功能,我尝试在活动中使用PARTIAL_WAKE_LOCK。这只会在屏幕锁定时继续播放音频,但不会在按下主页按钮时(即在后台)继续播放。有解决这个问题的方法吗?
如果你想让你的应用程序即使在后台也能继续运行音频,你必须在Separate Service.
中运行媒体播放器
即使应用程序进入后台或返回,此服务也将继续运行。如果应用程序被杀,你甚至可以编写一个粘性服务来保持运行(前台为true)。
您应该使用android服务来独立于您的活动播放音乐。请看这个例子:
这是我的Android服务类:
class MusicService extends Service implements OnCompletionListener {
MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
mediaPlayer = MediaPlayer.create(this, R.raw.s);// raw/s.mp3
mediaPlayer.setOnCompletionListener(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start();
}
return START_STICKY;
}
public void onDestroy() {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
public void onCompletion(MediaPlayer _mediaPlayer) {
stopSelf();
}
}
这是活动:
public class MusicActivity extends Activity implements OnClickListener {
Button startPlaybackButton, stopPlaybackButton;
Intent playbackServiceIntent;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startPlaybackButton = (Button) this.findViewById(R.id.StartPlaybackButton);
stopPlaybackButton = (Button) this.findViewById(R.id.StopPlaybackButton);
startPlaybackButton.setOnClickListener(this);
stopPlaybackButton.setOnClickListener(this);
playbackServiceIntent = new Intent(this,MusicService.class);
}
public void onClick(View v) {
if (v == startPlaybackButton) {
startService(playbackServiceIntent);
finish();
} else if (v == stopPlaybackButton) {
stopService(playbackServiceIntent);
finish();
}
}
}
请不要忘记在您的清单文件中添加服务:
<service android:enabled="true" android:name=".services.MusicService" />