Android - 无法在模拟器上获取gps位置

时间:2011-01-20 09:56:56

标签: java android android-emulator gps

我想在android模拟器上使用gps,我有以下代码:

public class NL extends Activity {

 private LocationManager locmgr = null;

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.nl);

        locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Criteria crit = new Criteria();
        crit.setAccuracy(Criteria.ACCURACY_FINE);
        String provider = locmgr.getBestProvider(crit, true);
        Location loc = locmgr.getLastKnownLocation(provider);


        Toast msg = Toast.makeText(this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT);
        msg.show();
    }
}

我在清单上添加了以下行:

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

我用DDMS方法和geo fix方法设置了gps位置,但是当我运行代码时,我在Toast行得到一个NullPointerExeption,可能是因为loc为null。

我不明白错误在哪里......你能帮帮我吗?


UPDATE!

感谢您的帮助,现在我使用以下代码,我没有得到任何错误,但它没有运行onChangeLocation内的代码...它不运行Toast并且不返回任何消息在日志中!

 public class NL extends Activity {

        private LocationManager locmgr = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.nl);

            locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

         // Define a listener that responds to location updates
            LocationListener locationListener = new LocationListener() {
                public void onLocationChanged(Location loc) {
                  // Called when a new location is found by the network location provider.
                    Log.i("NOTIFICATION","onLocationChenged Triggered");

                    Toast msg = Toast.makeText(NetworkLocator.this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT);
                    msg.show();
                }

                public void onStatusChanged(String provider, int status, Bundle extras) {}

                public void onProviderEnabled(String provider) {}

                public void onProviderDisabled(String provider) {}
              };

            // Register the listener with the Location Manager to receive location updates
            locmgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
        }
    }

谢谢!

4 个答案:

答案 0 :(得分:9)

模拟器在开头没有任何位置。根据{{​​3}},'getLastKnownLocation'方法可以返回 null ,所以没关系。在这种情况下,您应该等待位置更新(您可以从LocationManager用户requestLocationUpdates方法)。您可以通过以下命令在模拟器的gps模块上触发位置更新:

adb -e emu geo fix 50 50

答案 1 :(得分:7)

找到解决方案:

LocationManager.NETWORK_PROVIDER错误。

更正:LocationManager.GPS_PROVIDER

答案 2 :(得分:1)

如果你所描述的所有内容都已完成,那么你可能不是你的gps is in emulator.go来设置: - &gt;位置和安全性: - &gt;并且应该检查使用gps satelites


已编辑:ithink您必须使用没有条件类型的位置管理器。



LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

loc=mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

------而不是试着长久。和lat。

答案 3 :(得分:0)

您确定您的模拟设备实际上支持GPS吗? 我认为这有一个额外的选择......

这也可能有所帮助:

  

谢谢!对所有人:您可以随时在Eclipse中更改项目的Build Target:在Package Explorer中右键单击项目,选择Properties&gt; Android然后检查项目目标的“Google API”。 - 使用非英语文化设置的开发人员可能会注意到按位置控件中的“发送”按钮不会向Android模拟器发送新位置。随着即将发布的SDK工具版本7的出现,它已得到修复;要快速修复,您可以将语言环境更改为“en”。 (有关详细信息,请参阅code.google.com/p/android/issues/detail?id=915。) - Patrick de Kleijn

来源:GPS on emulator doesn't get the geo fix - Android