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