Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取当前的GPS位置?_Java_Android_Gps - Fatal编程技术网

Java 如何获取当前的GPS位置?

Java 如何获取当前的GPS位置?,java,android,gps,Java,Android,Gps,我将要在Android上构建一个应用程序,它将作为道路上员工的时钟卡 在作业开始时,用户将单击一个按钮,该按钮将记录GPS位置和当前时间(从而验证他在给定时间应该在哪里),并在作业结束时再次记录时间和GPS位置 所以我认为这很容易,只是我找不到一种方法来提取当前的位置数据。我能找到的最近的一个是onLocationChanged,这意味着我无法获得固定GPS读数。我知道这样做是有可能的,但找不到一个可行的例子来说明如何做到这一点。你应该尝试这样做 并使用Location.getTime(utc时

我将要在Android上构建一个应用程序,它将作为道路上员工的时钟卡

在作业开始时,用户将单击一个按钮,该按钮将记录GPS位置和当前时间(从而验证他在给定时间应该在哪里),并在作业结束时再次记录时间和GPS位置

所以我认为这很容易,只是我找不到一种方法来提取当前的位置数据。我能找到的最近的一个是
onLocationChanged
,这意味着我无法获得固定GPS读数。我知道这样做是有可能的,但找不到一个可行的例子来说明如何做到这一点。

你应该尝试这样做


并使用
Location.getTime(utc时间)
检查返回位置的时间,请求位置更新并创建一个LocationListener(请参见
LocationManager.RequestLocationUpdate
)。您将收到关于准确性的定期更新信息

在获得第一次更新之前,您可以(如公告所示)使用
LocationManager.getLastLocation()
并检查其时间戳和准确性


警告-有些设备需要很长时间才能获得准确的读数,而且完全是随机的。

经过一番研究,我得出了以下结论:

public class UseGps extends Activity
{
    Button gps_button;
    TextView gps_text;
    LocationManager mlocManager;

    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        gps_button = (Button) findViewById(R.id.GPSButton);
        gps_text = (TextView) findViewById(R.id.GPSText);

        gps_button.setOnClickListener(new OnClickListener() {
            public void onClick(View viewParam) {
                gps_text.append("\n\nSearching for current location. Please hold...");
                gps_button.setEnabled(false);
                mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                LocationListener mlocListener = new MyLocationListener();
                mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
            }
        });
    }

    /* Class My Location Listener */
    public class MyLocationListener implements LocationListener
    {
        @Override
        public void onLocationChanged(Location loc)
        {
            double lon = loc.getLatitude();
            double lat = loc.getLongitude();
            gps_text.append("\nLongitude: "+lon+" - Latitude: "+lat);
            UseGps.this.mlocManager.removeUpdates(this);
            gps_button.setEnabled(true);
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub
        }
    }
}
这将使用按钮和文本视图设置活动。在启动位置管理器的按钮上设置侦听器

我已经建立了一个类,
MyLocationListener
,它实现了
LocationListener
,然后我重写了
onLocationChanged()
方法,基本上告诉它,它得到的第一个位置会附加到textview,然后它会删除位置管理器


感谢那些帮助过我的人,我希望这对其他人有用。

好的,请原谅我的无知,但LastKnown位置并不意味着我现在的位置。。我希望应用程序在我按下按钮后立即获取我的位置,难道最后一个已知位置不可能发生在半小时前2英里后的道路上吗?那么onLocation Changed是获取最新位置的最佳方式。但这就是我的观点,如果我静止不动,想要获取我当前的位置怎么办?有没有一种方法可以将我的位置初始化为,比如说,0,然后触发位置更改?好的,我就是这样做的。。单击开始按钮并获取时间戳,基本上一直轮询lastKnown loaction,直到我得到一个时间戳大于开始时间戳的位置。。我必须说,我不敢相信没有一种方法可以进行抽样检查。当我使用谷歌地图或导航器时,我正在使用的设备可以很快地获取我的位置…不知道!查看上次已知的一次并请求更新,如上所示。如果它发生变化,您将收到通知。如果它不改变,那么lastKnown也不会改变!好的,我真的不想表现得懒惰,但我通过示例学习得最好,所以请注意,您(或任何人)有没有办法发布一些示例代码?