在app

时间:2016-06-23 16:38:59

标签: android android-notifications android-gps

我想在程序的后台捕捉GPS的速度。我有代码来捕获速度,但它不会工作,除非它是程序中运行的第一件事。这应该被编码为广播意图,还是意图服务,以便之后弹出通知?

SpeedManagerService.java:

public class SpeedManagerService extends Service {

private static final String TAG = "SpeedCheckerService";

private boolean isRunning = false;

@Override
public void onCreate() {
    Log.i( TAG, "Service onCreate" );

    isRunning = true;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    Log.i( TAG, "Service onStartCommand" );

    //Creating new thread for my service

    new Thread( new Runnable() {
        @Override
        public void run() {

            if (isRunning) {
                Log.i( TAG, "Service running" );
            }
        }

    } ).start();

    return Service.START_STICKY;
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}
}

然后我在Splash页面下添加了该特定页面的Intent(在启动页面开始之前在onCreate方法下运行):

 public class SplashActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

Intent intent = new Intent( this, Checker.class );
    startService( intent );

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

根据您的描述,您似乎可以在服务中完成所有工作。它将一直运行 - 您可以运行一个单独的线程来管理传入的数据处理,在运行时注册和取消注册接收器,以及s0notify用户。根据我的经验,以反应方式处理值流是一个好主意(rx) - 您接收数据,将其传递给运营商链(按速度值过滤)并在最后处理。 IntentService更适合长时间运行的一次性工作

答案 1 :(得分:0)

您应该实施服务并在其中设置您的条件。对于初学者,请完成此Guide。您可以在Location Listener中调用getSpeed()函数。