Android 为什么我的全球定位系统会出现“故障”;挂断?“;

Android 为什么我的全球定位系统会出现“故障”;挂断?“;,android,gps,Android,Gps,我正在尝试实现一个gps位置监听器,它将在后台保持并不断更新。我意识到这是一种不好的做法,但我这样做是为了测试。现在,我有一个位置侦听器,可以用getGPS()调用它。也可以使用killGPS()杀死它 当我四处走动,点击我的“获取gps”按钮时,它能很好地工作,该按钮从我的位置参数中获取纬度和经度 GPSActivity.getGPS(); loc_listener = GPSActivity.loc_listener; locationManager = (Loca

我正在尝试实现一个gps位置监听器,它将在后台保持并不断更新。我意识到这是一种不好的做法,但我这样做是为了测试。现在,我有一个位置侦听器,可以用getGPS()调用它。也可以使用killGPS()杀死它

当我四处走动,点击我的“获取gps”按钮时,它能很好地工作,该按钮从我的位置参数中获取纬度和经度

    GPSActivity.getGPS();
    loc_listener = GPSActivity.loc_listener;
     locationManager = (LocationManager)
     getSystemService(LOCATION_SERVICE);
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
     0, 0, loc_listener);
    location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
然而,在后台,有时它会说我仍然在我的公寓,即使我已经离开了3个小时! 为什么“我的位置侦听器”即使每10分钟打开一次以查找新位置,也不更新自身

谢谢

package com.cellphone;

import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class GPSActivity extends Activity{
    public static LocationListener loc_listener = null;

    public static void getGPS() {
        if (loc_listener == null) {
            loc_listener = new LocationListener() {

                @Override
                public void onStatusChanged(String provider, int status,
                        Bundle extras) {
                    // TODO Auto-generated method stub

                }

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

                }

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

                }

                @Override
                public void onLocationChanged(Location location) {
                    // TODO Auto-generated method stub

                }
            };
        }

    }

    public static void killGPS(LocationManager locationManager) {
        if (locationManager != null && loc_listener != null) {
            locationManager.removeUpdates(loc_listener);
        }
    }

}

我建议只使用“活动”来显示信息,并在后台使用带有部分唤醒锁的服务,这样即使设备尝试进入睡眠模式,它也能继续运行。然后在活动中使用broadcastreceiver从服务获取位置更新

无论您如何管理它,您都需要保持唤醒锁以确保它继续运行

检查此链接:

您必须持有以下权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

对于location poller,下面是一个简单的工作示例:


您可以通过在应用程序上下文中添加函数来保持应用程序的状态。也就是说,位置轮询器可以知道应用程序的状态,并在应用程序未激活时跳过gps操作。

我将向“onProvider…”添加一些方法,并将它们写入日志文件。我敢打赌,该提供商正陷入困境?为了获得更好的GPS结果,您可以将GPS\U提供商更改为网络提供商。还有在onLocationChanged方法中更新的值有没有一种方法可以让位置轮询器监听更长时间?到目前为止,它只听了半秒钟,我从定位中得到的准确度。准确度一直都是在我的手机变暗时>25分钟的睡眠模式,还是在几小时不活动后?这个问题的答案将决定我是否找到了我的主要问题。谢谢,不是百分之百确定,但我认为通常速度很快。例如:如果你正在玩一个有音乐的游戏,音乐通常会在黑屏5秒钟后关闭。这可能取决于设备和后台运行的服务。服务似乎比活动更持久。
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");

//you would acquire in onStart() or on your getGPS() or somewhere else if you like.
mWakeLock.acquire();
// you would release in your onStop() or your onDestroy() or on your killGPS()
mWakeLock.release();