想了解Android中的Service类

时间:2016-02-28 14:16:51

标签: android

我想创建一个应用程序,其中我的音频配置文件模式根据位置而变化。为此,我总是需要在后台检查位置。我怎么能在后台这样做?在Service Class中获取和比较代码的位置以及何时启动我的服务类?

2 个答案:

答案 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