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

时间:2010-05-08 22:11:21

标签: android locationmanager

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

事实上,我在主要活动的onCreate()方法中设置了一个位置管理器,该方法应该将第一个获取的lat / long放入两个textview字段中。即使清单设置为获取粗调和细调并且我使用requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener),minTime和minDistance设置为零,我也没有看到屏幕上出现的坐标。有了这个,我没有记录服务器上的任何位置。

当我使用样本坐标对文本视图进行播种时,它们在服务器上正常记录。我不是一台可以运行IDE的计算机,因此目前没有代码,但我非常渴望得到一些帮助。

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

标记。

2 个答案:

答案 0 :(得分:0)

对于这种复杂的东西,没有代码,很难帮助你。

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

我不知道TextViews在哪里发挥作用,或者他们与某个服务器有什么关系,或者他们与onResume()有什么关系,或者他们有什么需要做“摄影应用程序”。

答案 1 :(得分:0)

感谢CommsWare。由于评论字段中的空间限制,我使用这种方式来回应。

用户应该拍摄他们即将拾取的物品的照片并将其发送到服务器。完成此操作后,服务器会发回一个轮询周期,以便手机定期发送其位置。我设置textViews来显示获得的纬度/经度(见下文),但这部分直到两个晚前才开始工作。在我有点耐心之后它终于工作了,让手机花时间去获得一个位置。我认为问题在于我不允许手机进行定位,所以它无法正常工作。现在的问题仍然是定期更新可能不起作用,基于你所说的,并且基于我在完全晴朗的天空下站在外面大约2分钟的事实,然后才得到定位。

这是一些代码的快照(这部分在主要活动的onCreate覆盖中以获得第一个位置修复):

`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);
                }
            });

`

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

            //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);
                }
            }

在跟踪服务类中,我使用从其onStart()重写调用的方法,该方法将当前坐标简单地打包到SOAP对象中并更新服务器。如果手机像你说的那样进入睡眠状态,我担心GPS可能没有足够的时间在这些更新期间锁定。我想知道当服务启动时我应该有某种类型的计时器(也许是requestLocationUpdates的minTime设置?)让手机保持唤醒状态大约3分钟,这样可以进行修复?如果这些代码片段有帮助,请告诉我,如果可以更新位置的想法,谢谢。