Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.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
Android 安卓GPS。位置侦听器不希望获取修复:(_Android_Gps - Fatal编程技术网

Android 安卓GPS。位置侦听器不希望获取修复:(

Android 安卓GPS。位置侦听器不希望获取修复:(,android,gps,Android,Gps,下面是一段代码,假设它监听GPS更新并向主要活动发送通知 但是,它似乎不起作用:) 没有错误,只有onLocationChanged未调用 有趣的是:当我运行其他应用程序来获得GPS定位,然后启动我的应用程序=>onLocationChanged被调用时,唯一的精度下降,最终定位丢失 我还试着在代码中添加GPS listener=>它可以工作,视野中的卫星每秒都会被报告,唯一的修正是永远不会被发现的 到底发生了什么事?:) 公共类电话gpspos{ private Handler myHandl

下面是一段代码,假设它监听GPS更新并向主要活动发送通知

但是,它似乎不起作用:)

没有错误,只有onLocationChanged未调用

有趣的是:当我运行其他应用程序来获得GPS定位,然后启动我的应用程序=>onLocationChanged被调用时,唯一的精度下降,最终定位丢失

我还试着在代码中添加GPS listener=>它可以工作,视野中的卫星每秒都会被报告,唯一的修正是永远不会被发现的

到底发生了什么事?:)

公共类电话gpspos{

private Handler myHandler = null;
private LocationManager lm;
private LocationListener locationListener;
private Location currentBest;
Context m_context;
公用电话gpspos(上下文、处理程序){

}

检查项目AndroidManifest.xml文件中的权限

您在哪里测试?室内? 其他应用程序使用哪些提供商?网络提供商

我的猜测是,正在运行的应用程序使用网络提供商,由于您正在获取最后一个已知位置,它将从上一个应用程序位置ping返回该位置。网络提供商通过提供一般位置来帮助分配gps卫星。因此,当您启动应用程序(运行其他应用程序后)时,您有卫星,但(因为你可能在室内)没有网络,你可能会一点一点地丢失卫星,降低精度


这个故事的寓意是:也可以使用网络提供商,或者确保您可以清楚地看到天空来测试gps。

好的,找出这是一个其他人也看到的问题:显然(至少在某些手机上),如果摄像头处于活动状态,gps侦听器的工作效果会差得多

为此创建了一个ANDROID问题


如果有人有解决方案,请分享

你在哪里测试?室内?没有。正如我所说:“其他应用程序可以修复”。当我切换回我的应用程序后,Onlocation Changed被调用,但准确性会降低。最终修复程序会丢失。提供程序不需要互联网许可。精细位置在。粗略位置不在。我不使用网络。我只需要GPSnot。正如我所说:“其他应用程序可以修复”.当我在onLocationChanged被调用之后切换回我的应用程序时,唯一的问题是准确性降低。最终修复程序会丢失。所以当你调试此应用程序时,你在外面的晴朗天空中?是的。1)我启动我的应用程序。2)等待~10分钟-无修复。3)启动GPS状态。几分钟后获得修复。4)再次运行我的应用程序。5)查看它如何以降低的精度报告位置。6)一段时间后,修复丢失。请确保接受您自己的答案,以便其他人可以快速找到您的解决方案。我在同一时间请求网络位置时看到这种情况e、 现在试图找到一个与此相关的问题,以防有人有解决办法。。。
    myHandler = handler;
    m_context = context;


    lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

 //  Bundle bundle = new Bundle();
 //  boolean xtraInjection=lm.sendExtraCommand(LocationManager.GPS_PROVIDER,"force_xtra_injection",bundle);
 //  boolean timeInjection=lm.sendExtraCommand(LocationManager.GPS_PROVIDER,"force_time_injection",bundle);

   currentBest = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    locationListener = new LocationListener() 
   { 

           public void onLocationChanged(Location location)
           { 
                Log.w("Compass", "Loc");

            if (location != null)
            {
                currentBest = location;

                Message msg = new Message();

                msg.arg1 = 5;
                myHandler.sendMessage(msg);

            }
           } 

           public void onStatusChanged(String provider, int status, Bundle 
           extras) {
            Log.d("Compass", "Stat");
           } 

           public void onProviderEnabled(String provider) {
            Log.d("Compass", "Prov e");
           } 

           public void onProviderDisabled(String provider) {
            Log.d("Compass", "Prov d");
        } 
   }; 
}

public void requestGPS()
{
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    Log.d("Compass", "gps requested");
}

public void stopGPS()
{
    Log.d("Compass", "gps stopped");
    lm.removeUpdates(locationListener);
}

public synchronized  Location getBest()
{
    return  currentBest;
}
Check for permissions in your projects AndroidManifest.xml file

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>