我想创建一个应用程序,其中我的音频配置文件模式根据位置而变化。为此,我总是需要在后台检查位置。我怎么能在后台这样做?在Service Class中获取和比较代码的位置以及何时启动我的服务类?
答案 0 :(得分:0)
使用返回" START_STICKY"在onStartCommand()函数中。系统终止后,您的服务将重新启动。但有时,它不会重新启动。要使您的服务100%活跃,请使用前台服务。无论如何,前台服务需要始终显示的通知。
答案 1 :(得分:0)
以下是每5分钟重启一次的IntentService示例。
public class MyIntentService extends IntentService {
int updateVal;
public MyIntentService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
// your code here. Request location updates here.
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
//minutes after which the service should restart
updateVal = 5;
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
//This is to incorporate Doze Mode compatibility on Android M and above.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
alarm.setAndAllowWhileIdle(
alarm.RTC_WAKEUP,
System.currentTimeMillis() + (1000 * 60 * updateVal),
PendingIntent.getService(this, 0, new Intent(this, MyIntentService.class), 0)
);
//For all other versions.
else
alarm.set(
alarm.RTC_WAKEUP,
System.currentTimeMillis() + (1000 * 60 * updateVal),
PendingIntent.getService(this, 0, new Intent(this, MyIntentService.class), 0)
);
}
}
在您的主要活动中,输入此代码以启动该服务。
startService(new Intent(this, MyIntentService.class));
您必须实现LocationListener并获取我尚未添加到代码中的位置更新。
如果您真的希望启动永不停止的服务,则需要扩展Service类而不是IntentService类。 Android开发者指南中已对此进行了详细解释:http://developer.android.com/guide/components/services.html