Update GPS Listener every 5 seconds(每 5 秒更新一次 GPS 监听器)
问题描述
我应该每 5 秒更新一次侦听器.但事实并非如此.我的代码可能有什么问题?
I'm supposed to update the listener every 5 seconds. But it doesn't. What could be wrong with my code?
非常感谢您的帮助!
package com.example.android.lbs;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.sql.Date;
import java.text.SimpleDateFormat;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class LbsGeocodingActivity extends Activity {
public static final String LOG_TAG = "<<< ------------ >>> GeocodingActivity <<< ------------ >>>";
TextView tv;
int ScreenOutputCount;
String newTrip;
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 0; // in Meters
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 5000; // in Milliseconds, 5 secconds
protected LocationManager lm;
MyLocationListener locationL = new MyLocationListener();
protected Button retrieveLocationButton;
//Log.e(LOG_TAG, e.toString());
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
View.OnClickListener handler = new View.OnClickListener(){
public void onClick(View v) {
//we will use switch statement and just
//get thebutton's id to make things easier
switch (v.getId()) {
case R.id.trip_start:
tripStart();
break;
case R.id.trip_end:
tripEnd();
break;
}
}
};
//we will set the listeners
findViewById(R.id.trip_start).setOnClickListener(handler);
findViewById(R.id.trip_end).setOnClickListener(handler);
}catch(Exception e){
Log.e("Android Button Tutorial", e.toString());
}
}
public void tripStart(){
File originalDirectories = new File( Environment.getExternalStorageDirectory() + "/Android/GpsTracker/" );
if( !originalDirectories.exists() ){
originalDirectories.mkdirs();
}
LbsGeocodingActivity.this.newTrip = getNewFileName();
LbsGeocodingActivity.this.ScreenOutputCount = 1;
LbsGeocodingActivity.this.tv = (TextView) this.findViewById( R.id.thetext );
LbsGeocodingActivity.this.tv.setText("Location Updates:
");
LbsGeocodingActivity.this.lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LbsGeocodingActivity.this.lm.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
this.locationL
);
Toast.makeText(getBaseContext(), "New Trip Started.", Toast.LENGTH_SHORT).show();
}
public String getNewFileName(){
SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyyMMddHHmmss");
return sdfDateTime.format(new Date(System.currentTimeMillis()));
}
public void tripEnd(){
LbsGeocodingActivity.this.lm.removeUpdates( this.locationL );
Toast.makeText(getBaseContext(), "Trip Ended.", Toast.LENGTH_SHORT).show();
}
protected void showCurrentLocation() {
try{
Location location = LbsGeocodingActivity.this.lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
String show_curent = "Longitude: " + location.getLongitude()
+ " | Latitude: " + location.getLatitude();
//LbsGeocodingActivity.this.tv.append( show_curent );
Toast.makeText(getBaseContext(), show_curent, Toast.LENGTH_SHORT).show();
//LbsGeocodingActivity.this.ScreenOutputCount = LbsGeocodingActivity.this.ScreenOutputCount + 1;
}else{
Toast.makeText(getBaseContext(), "Last Know Location Not Found.", Toast.LENGTH_SHORT).show();
}
}catch( NullPointerException e){
Log.e("Android Button Tutorial", e.toString() );
}
}
private class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
LbsGeocodingActivity.this.tv.append( LbsGeocodingActivity.this.ScreenOutputCount
+ " | Longitude: " + location.getLongitude()
+ " | Latitude: " + location.getLatitude() + "
" );
LbsGeocodingActivity.this.ScreenOutputCount = LbsGeocodingActivity.this.ScreenOutputCount + 1;
logLocationUpdate( location.getLongitude(), location.getLatitude() );
}
public void logLocationUpdate( double longitude, double latitude){
try {
SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String timestamp = sdfDateTime.format(new Date(System.currentTimeMillis()));
String logString = timestamp + "::" +
longitude + "::" +
latitude + "
";
String sdcard = Environment.getExternalStorageDirectory() + "/Android/GpsTracker/";
//then write the file
final String TESTSTRING = new String(logString);
File gpxfile = new File(sdcard, LbsGeocodingActivity.this.newTrip + ".txt" );
FileWriter gpxwriter = new FileWriter( gpxfile, true );
BufferedWriter out = new BufferedWriter( gpxwriter );
out.write(TESTSTRING);
out.close();
}catch(Exception e){
Log.e("GPS Tracker", e.getMessage());
}
}
public void onStatusChanged(String s, int i, Bundle b) {
/*
Toast.makeText(LbsGeocodingActivity.this, "Provider status changed",
Toast.LENGTH_LONG).show();
*/
}
public void onProviderDisabled(String s) {
Toast.makeText(LbsGeocodingActivity.this,
"Provider disabled by the user. GPS turned off",
Toast.LENGTH_LONG).show();
}
public void onProviderEnabled(String s) {
Toast.makeText(LbsGeocodingActivity.this,
"Provider enabled by the user. GPS turned on",
Toast.LENGTH_LONG).show();
}
}
}
推荐答案
将其设置为 5000 毫秒并不一定意味着您将每 5 秒获取一次位置.时间或多或少是最好的情况.
By setting it to 5000 ms it doesn't necessarily mean that you will get the location every 5th second. The time is more or less a best case scenario.
minTime 通知的最小时间间隔,以毫秒为单位.此字段仅用作节省电量的提示,位置更新之间的实际时间可能大于或小于此值.http://developer.android.com/reference/android/location/LocationManager.html
minTime the minimum time interval for notifications, in milliseconds. This field is only used as a hint to conserve power, and actual time between location updates may be greater or lesser than this value. http://developer.android.com/reference/android/location/LocationManager.html
您确定您的活动正在运行吗?如果您想在活动处于休眠状态时接收位置,则需要唤醒锁和服务.
Are you sure you have your activity running? If you want to recieve the location when the activity is sleeping you need a wake lock and a service.
例如,在我创建的 GPS 应用程序中,我设置了 0 毫秒来尽快获取它,但在调试和检查 logcat 时,我有时每分钟左右获取一次位置,而不是每秒获取一次.
For example in a GPS app I created I put 0 ms to get it as soon as possible but when debugging and checking the logcat I sometimes get the location every minute or so, not every second.
这篇关于每 5 秒更新一次 GPS 监听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:每 5 秒更新一次 GPS 监听器
基础教程推荐
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01