如何优化定义位置之间的检查流程

时间:2018-03-21 19:52:29

标签: java android algorithm location mathematical-optimization

我是一个没有经验的程序员。我正在研究一个在某些情况下会播放特定视频的android项目。我的客户在地图上定义了一些方形区域,我的应用程序将这些区域保存在数据库中。每个区域有四个组件:Lat和Lng的最小值和最大值。我通过GPS(和离线)跟踪用户的当前位置。我的目标是检查用户是否在一个已定义的区域内,如果是,则播放视频,否则无效。这个检查过程应该每秒进行一次,因此必须进行优化。我的问题是:什么是最好的算法?如何实现此算法以尽可能快地检查区域?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用此类服务​​

public class YourService extends Service {

private final static String TAG = "yourtag";
public static final String YOURTIMEOUT = "com.example.timeout";
public static final String TIMER = "com.example.timer";
private Intent bi = new Intent(YOURTIMEOUT );
private CountDownTimer cdt = null;



@Override
public void onCreate() {
    super.onCreate();
    IntentFilter filter = new IntentFilter();
    filter.addAction(YOURTIMEOUT );
    registerReceiver(receiver, filter);
}

private void newCountdown() {

   cdt = new CountDownTimer(1000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {


        }

        @Override
        public void onFinish() {
            sendBroadcast(bi);
        }
    };
    cdt.start();
}

private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        switch (intent.getAction()) {
            case YOURTIMEOUT :
                newCountdown();
                break;
        }
    }
};

@Override
public void onDestroy() {
    cdt.cancel();
    unregisterReceiver(receiver);
    super.onDestroy();
}

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

    newCountdown();
    return super.onStartCommand(intent, flags, startId);
}

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

显然这是每一秒,所以倒计时没有意义,但如果你决定改变每一秒,那么它就会变得非常方便。

让您感兴趣的活动通过YOURTIMEOUT标记捕获意图并在获得时运行检查代码。确保在您的活动暂停时停止服务。