关闭应用程序后在后台播放音乐

时间:2018-11-19 15:36:27

标签: java android android-mediaplayer

我的问题是关于用户关闭应用程序后播放音乐(“应用程序”选项卡未显示在当前打开的应用程序列表中)。

我创建了一个类来处理针对媒体播放器播放铃声音乐的服务:

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秒内重新启动该活动?

3 个答案:

答案 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测试您的代码。

https://developer.android.com/studio/command-line/logcat

答案 2 :(得分:0)

您需要使用startForeground(id, notification)将服务置于前台,请检查official docs以供参考。

当前台有服务时,由于不会将您的进程视为后台进程,因此可以大大减少进程被终止的机会。缺点是您必须显示一个永久性通知,在您的情况下,这可能是可取的,因为您可能需要对播放器进行控制。

相关问题