我的问题是关于用户关闭应用程序后播放音乐(“应用程序”选项卡未显示在当前打开的应用程序列表中)。
我创建了一个类来处理针对媒体播放器播放铃声音乐的服务:
public class RingService extends Service {
private MediaPlayer player;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
player = MediaPlayer.create(this,
Settings.System.DEFAULT_RINGTONE_URI);
player.setLooping(true);
player.start();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
player.stop();
}
}
在MainActivity中,我使用一个按钮开始播放音乐。直到我关闭应用程序,它才能正常工作。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
super.onStart();
}
public void onRing(View view) {
Intent intent = new Intent(this, RingService.class);
startService(intent);
}
public void onStop(View view) {
Intent intent = new Intent(this, RingService.class);
stopService(intent);
}
}
有人可以告诉我,我在做什么错吗?我将非常感谢。 只是不为该应用程序启动另一个主题,我将在这里询问它-是否可以在用户关闭活动后10秒内重新启动该活动?
答案 0 :(得分:0)
我认为您错过了要实现的onCreate
我的应用使用以下代码运行良好:
public class BackgroundMusicService extends Service {
MediaPlayer musicPlayer;
public IBinder onBind(Intent arg) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
musicPlayer = MediaPlayer.create(this, R.raw.your_music_file);
musicPlayer.setLooping(true); // Set looping
musicPlayer.setVolume(100,100);
}
public int onStartCommand(Intent intent, int flags, int startId) {
musicPlayer.start();
return 1;
}
@Override
public void onDestroy() {
musicPlayer.stop();
musicPlayer.release();
}
并在您的清单中显示:
<service android:enabled="true" android:name=".BackgroundSoundService" />
答案 1 :(得分:0)
因此,关闭您的应用程序后,您想使用 RingService 播放一些铃声,但是当用户关闭该应用程序时,您的MainActivity中将使用此代码onStop()
调用Intent intent = new Intent(this, RingService.class);
stopService(intent);
方法。如果您同时停止服务,服务如何播放音乐。
尝试从onStop()
删除此代码(不确定它是否可以解决问题,但值得尝试)。
此外,我建议使用Logcat测试您的代码。
答案 2 :(得分:0)
您需要使用startForeground(id, notification)
将服务置于前台,请检查official docs以供参考。
当前台有服务时,由于不会将您的进程视为后台进程,因此可以大大减少进程被终止的机会。缺点是您必须显示一个永久性通知,在您的情况下,这可能是可取的,因为您可能需要对播放器进行控制。