2012-06-06 385 views
4

我试图获取当前位置Android中使用的LocationManager和LocationListener的作为http://developer.android.com/guide/topics/location/obtaining-user-location.html的LocationManager requestLocationUpdates不起作用

然而,LocationListener的的onLocationChanged方法不会被调用描述。我使用了一个真正的android手机/也使用了仿真器和仿真位置,使用telnet进行了更改,如上面的链接所述。

这里是我的代码:

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     /* Use the LocationManager class to obtain GPS locations */ 
     LocationManager mlocManager = (LocationManager) 
       getSystemService(Context.LOCATION_SERVICE); 
     LocationListener mlocListener = new CustomLocationListener(
       getApplicationContext()); 
     // Location Providers 
     String locationProvider = LocationManager.NETWORK_PROVIDER; 
     // LocationProvider locationProvider = LocationManager.GPS_PROVIDER; 
     mlocManager 
       .requestLocationUpdates(locationProvider, 0, 0, mlocListener); 
    } 
} 

和我LocationListener的:

public class CustomLocationListener implements LocationListener { 

    private Context m_context; 

    public CustomLocationListener(Context context) { 
     m_context = context; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 
     String Text = latitude + " " + longitude; 
     Toast.makeText(m_context, Text, Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO 
    } 

    @Override 
    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {} 
} 

所以onLocationChanged永远不会被调用。 任何人都可以看到问题? 非常感谢

+0

您是否启用了手机上的GPS服务,并确认您应该拥有一个位置? (等待几分钟不是一个确认,如果你在一个很差的服务区30分钟可能是不够的...) – Sam

+0

得问:你有清单中指定的位置权限? – dymmeh

+0

@dophie是的,我已经在清单中添加了许可 –

回答

1

确保在“设置”中启用了正确的位置服务。您也可以使用isProviderEnabled()来检查您选择的特定供应商是否可以使用。并确保您的清单中具有COARSE或FINE位置权限。

此外,请确保您在设备上进行测试。网络位置在模拟器中根本不起作用,并且只有在您使用模拟工具注入新数据点时,GPS才会起作用。

+0

不幸的是,'isProviderEnabled()'不能像宣传的那样工作。请参阅:http://stackoverflow.com/questions/10154937/isproviderenabledlocationmanager-network-provider-return-false和http://stackoverflow.com/questions/16748300/locationmanager-isproviderenabledlocationmanager-network-provider-is-not-relia – Jules

3

你也可以让你的手机确定最佳的提供商,而不是只设置

String locationProvider = LocationManager.NETWORK_PROVIDER; 

试试这个:

Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
criteria.setAltitudeRequired(false); 
criteria.setBearingRequired(false); 
criteria.setCostAllowed(true); 
criteria.setPowerRequirement(Criteria.POWER_LOW); 
String locationProvider = mlocManager.getBestProvider(criteria, true); 

此外,有你在你的设备移动到新的位置进行测试?否则,“onlocationchanged”事件可能不会触发。当我在几年前计算出这些东西时,当我在这个区块周围散步以确认事件正在发射时,我放入了一些“吐司”以提醒我经纬度坐标。

+1

我怎样才能让模拟器“去一个新的位置”? –

+1

@MathiasLykkegaardLorenzen:我总是用一个设备开发,但是如果你按照上面Dan Dinu的原始问题的链接,它看起来像你可以模拟仿真器中的位置。转到该文章的底部,并参阅“在模拟器控制台中使用”geo“命令”。 – CircuitBreaker716

3

对我来说这看起来像Android Bug 57707

如果是这样,至少在一段时间内重新启动设备应该会有所帮助。可以使用Google Play Services Location API

通过使用Wifi,GPS和网络定位,Google Play服务位置API将隐藏网络定位被破坏的事实;这只有在你既没有GPS也没有Wifi时才会很明显。

0

我遇到过类似的问题。 Try replacing getApplication() with MainAvtivity.this

此外,请确保您保持FINE和COARSE位置的权限。如果您的目标API超过23个,您还应该从Java代码处理权限。

相关问题