Android 将获取的位置设置为文本视图:如何维护?

Android 将获取的位置设置为文本视图:如何维护?,android,locationmanager,Android,Locationmanager,我已经为摩托罗拉Droid开发了一个应用程序,它可以自动用手机的位置更新服务器。用户在主活动屏幕上执行特定任务后,会设置一个警报,使用服务定期更新用户的位置。当用户完成另一项任务时,报警会显式停止 问题是,我在主活动的onCreate()方法中设置了一个位置管理器,它应该将第一个获取的lat/long放在两个textview字段中。即使清单是为获取粗略和精细坐标而设置的,并且我正在使用requestLocationUpdates(字符串提供程序、long minTime、float minDis

我已经为摩托罗拉Droid开发了一个应用程序,它可以自动用手机的位置更新服务器。用户在主活动屏幕上执行特定任务后,会设置一个警报,使用服务定期更新用户的位置。当用户完成另一项任务时,报警会显式停止

问题是,我在主活动的onCreate()方法中设置了一个位置管理器,它应该将第一个获取的lat/long放在两个textview字段中。即使清单是为获取粗略和精细坐标而设置的,并且我正在使用
requestLocationUpdates(字符串提供程序、long minTime、float minDistance、LocationListener侦听器)
,当minTime和minDistance设置为零时,我没有看到屏幕上出现坐标。这样,我就不会在服务器上记录任何位置

当我在文本视图中添加示例坐标时,它们在服务器上的记录良好。我不是在一台可以运行IDE的计算机上,所以目前没有代码,但我非常希望在这方面得到帮助

另一件事是,在用户手动单击“发送数据”之前,主活动屏幕会调用一个摄影应用程序。我怀疑我可能需要重写主活动的
onResume()
方法来获取此位置。请帮忙,谢谢


马克。

对于如此复杂的事情,没有代码,很难帮助你

暗中冒险,尝试将
requestLocationUpdates()
AlarmManager
警报和服务结合使用是很难做到的。例如,如果该服务是一个
IntentService
,并且正在注册位置更新,那么在最好的情况下,它将失败,在最坏的情况下,您将像筛子一样泄漏内存。还有一个问题是,在您等待位置修复时,请确保设备处于唤醒状态,因为设备可能会想重新进入睡眠状态


我不知道
textview
在哪里发挥作用,也不知道它们与某些服务器有什么关系,也不知道它们与
onResume()
有什么关系,也不知道它们与“摄影应用程序”有什么关系。

感谢CommsWare。由于评论栏的空间限制,我用这种方式回应

用户应该为他们将要拾取的项目拍照并将其发送到服务器。完成此操作后,服务器会发回轮询周期,以便手机定期发送其位置。我已经设置了
文本视图
来显示获得的lat/long(见下文),但这部分直到两天前才开始工作。在我耐心一点,让手机慢慢获得一个职位后,它终于起作用了。我想当时的问题是,我不允许手机定位,所以它不工作。现在的问题仍然是,根据你所说的,以及我在完全晴朗的天空下站了大约2分钟才得到位置修正,定期更新可能不起作用

下面是一些代码的快照(这部分位于主活动的onCreate覆盖中,用于获取第一个位置修复):

`

下面是SOAP请求和响应处理机制的一部分。
`//以秒为单位获取轮询周期。 字符串[]getPollNumber; getPollNumber=resultParams[2]。拆分(“;”)

"

在跟踪服务类中,我使用了一个从其onStart()覆盖调用的方法,该方法只是将当前坐标打包到一个SOAP对象中并更新服务器。我担心,如果手机像你说的那样进入睡眠状态,GPS可能没有足够的时间在这些更新期间锁定。我想知道当服务启动时,我是否应该有一个计时器(可能是requestLocationUpdates的minTime设置?)让手机保持清醒大约3分钟,以便修复?请让我知道这些代码片段是否有用,以及更新职位的想法是否可行,谢谢

`LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
            0, new LocationListener() {
                public void onStatusChanged(String provider, int status,
                        Bundle extras) {
                    // called when the provider status changes. Possible
                    // status: OUT_OF_SERVICE, TEMPORARILY_UNAVAILABLE or
                    // AVAILABLE.
                }

                public void onProviderEnabled(String provider) {
                    // called when the provider is enabled by the user
                }

                public void onProviderDisabled(String provider) {
                    // called when the provider is disabled by the user, if
                    // it's already disabled, it's called immediately after
                    // requestLocationUpdates
                }

                public void onLocationChanged(Location location) {
                    double latitute = location.getLatitude();
                    double longitude = location.getLongitude();
                    tv5.setText(""+latitute);
                    tv6.setText(""+longitude);
                }
            });
            //Set up the intent to be passed to the tracking service.
            Intent updateLocation = new Intent (this,TrackUser.class);  
            PendingIntent pendingIntent = PendingIntent.getService(PickUp.this, 0, updateLocation, 0);

            //Set up the alarm manager to be used to periodically send updates.
            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

            //If instruction = 1, start tracking the user.
            if(instruction == 1)
            {                   
                //Start tracking service on phone.
                pollPeriod = Integer.parseInt(getPollNumber[0]);
                alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (pollPeriod*1000), pollPeriod*1000, pendingIntent);
            }
            else
            {
                if(instruction == 0)
                {
                    //Stop tracking service.
                    stopService(new Intent(this,TrackUser.class));
                    alarmManager.cancel(pendingIntent);
                }
            }