当我杀死App时如何继续播放音乐

时间:2016-02-11 13:33:18

标签: android android-mediaplayer

在Android中,我使用Service和BroadcastReceiver播放音乐。

当我按下主页按钮或后退按钮时,MediaPlayer可以继续播放音乐。但是当我从概述屏幕中删除它时它无效。即使我将服务设置为前台服务。

@ 0xDEADC0DE指出id不应该是0。我修改它现在它可以正常工作。但它必须有通知。一些应用程序,如网易云音乐,没有任何通知,即使它被杀死也可以玩,它是如何工作的?

更新 我发现我已经关闭了应用程序的通知,所以当我杀了它时它仍然没有通知播放音乐......所以问题解决了,谢谢

这是我的代码:

MainActivity.java

setTimeout

Service.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private ImageButton mPlayButton;
private ImageButton mPreviousButton;
private ImageButton mNextButton;
private TextView mMusicName;
private boolean mState = false;
private Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mMusicName = (TextView) findViewById(R.id.music_name);
    mPlayButton = (ImageButton) findViewById(R.id.play);
    mNextButton = (ImageButton) findViewById(R.id.next);
    mPreviousButton = (ImageButton) findViewById(R.id.previous);
    mPlayButton.setOnClickListener(this);
    mNextButton.setOnClickListener(this);
    mPreviousButton.setOnClickListener(this);


    intent = new Intent(this, MusicService.class);

    startService(intent);

}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.play:
            if (!mState) {
                //start
                mState = true;
                mPlayButton.setImageResource(R.mipmap.ic_pause_circle_outline_white_48dp);
                Intent intent = new Intent();
                intent.setAction("com.geekband.mo.musicplayer");
                intent.putExtra("action", 0);
                sendBroadcast(intent);

            } else {
                //pause
                mPlayButton.setImageResource(R.mipmap.ic_play_circle_outline_white_48dp);
                mState = false;
                Intent intent = new Intent();
                intent.setAction("com.geekband.mo.musicplayer");
                intent.putExtra("action", 1);
                sendBroadcast(intent);
            }
            break;

        case R.id.next:
            mState = true;
            mPlayButton.setImageResource(R.mipmap.ic_pause_circle_outline_white_48dp);
            Intent intent = new Intent();
            intent.setAction("com.geekband.mo.musicplayer");
            intent.putExtra("action", 2);
            sendBroadcast(intent);
            break;

        case R.id.previous:
            mState = true;
            mPlayButton.setImageResource(R.mipmap.ic_pause_circle_outline_white_48dp);
            Intent intent2 = new Intent();
            intent2.setAction("com.geekband.mo.musicplayer");
            intent2.putExtra("action", 3);
            sendBroadcast(intent2);
            break;

    }
    }



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.action_exit) {
        stopService(intent);
        finish();
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}

1 个答案:

答案 0 :(得分:1)

如果您的服务从任务切换器中删除或者您杀死了应用,那么您的服务就会像应用的所有其他资源一样被杀死。通过从任务切换器中删除/删除它,该过程停止。您的服务生活在同一个过程中,因此也会停止。这就是Android(和其他操作系统)的工作原理。

修改
这确实是可能的,但根据文档,您不应该使用ID为0的startForeground

  

警告:您为startForeground()提供的整数ID不能为0.

http://developer.android.com/guide/components/services.html#Foreground