在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);
}
}
答案 0 :(得分:1)
如果您的服务从任务切换器中删除或者您杀死了应用,那么您的服务就会像应用的所有其他资源一样被杀死。通过从任务切换器中删除/删除它,该过程停止。您的服务生活在同一个过程中,因此也会停止。这就是Android(和其他操作系统)的工作原理。
修改强>
这确实是可能的,但根据文档,您不应该使用ID为0的startForeground
:
警告:您为startForeground()提供的整数ID不能为0.
http://developer.android.com/guide/components/services.html#Foreground