使用服务来实现问题目的。
代码:
内部清单:
<service
android:name=".MyService"
android:enabled="true" />
服务类:
public class MyService extends Service {
private MediaPlayer media;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
media = MediaPlayer.create(this, Settings.System.DEFAULT_RINGTONE_URI);
media.setLooping(true);
media.start();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
media.stop();
}
我的Java课程:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void startMethod(View v) {
startService(new Intent(this, MyService.class));
}
public void stopMethod(View v) {
stopService(new Intent(this, MyService.class));
}
所以,问题是,当我杀死应用程序时,媒体播放器会停止播放音乐或我的默认铃声。因为,我使用START_STICKY,它应该在后台运行。
可能是什么问题?即使在Android中使用服务杀死了应用程序,我也需要播放音乐。如果出现问题,请指导。感谢。
修改
上述问题适用于较低版本的设备。对于更高版本,我们可以使用JobService。
现在,问题是如果我想检查后台服务中的具体时间,并且在特定时间我必须显示Toast消息。到目前为止,我已经在onStartCommand()方法中完成了它,并将时间与.equals方法进行了比较。但是,我认为还有另一种方法可以做到这一点。
我在onStartCommand()中的代码:
if(currentTime.equals("Thu Mar 29 06:18:00 GMT 2018")){
Toast.makeText(this, ""+currentTime, Toast.LENGTH_SHORT).show();
}
if(currentTime.equals("Thu Mar 29 06:20:00 GMT 2018")){
Toast.makeText(this, ""+currentTime, Toast.LENGTH_SHORT).show();
}
if(currentTime.equals("Thu Mar 29 06:21:00 GMT 2018")){
Toast.makeText(this, ""+currentTime, Toast.LENGTH_SHORT).show();
}
Toast在这些特定时间不显示。因为它仅在onStartCommand()方法调用时显示。那么,我怎样才能做到这一点?
答案 0 :(得分:1)
如果这适用于较低版本的Android设备,那么您可以尝试使用JobService来获得更高版本的Android设备。
按照以下链接&amp;在JobScheduling成为职业选手:
https://github.com/evernote/android-job
https://github.com/firebase/firebase-jobdispatcher-android http://blog.teamtreehouse.com/scheduling-work-jobscheduler