位置管理器无法在Android 4.0.2模拟器中运行

我在我的应用程序中使用Location Manager进行GPS跟踪。 在Android 2.2,2.3.3模拟器和设备中使用时,应用程序返回apt位置。 但是,奇怪的是我在模拟器4.0.2中测试了应用程序。 它返回强制关闭错误,如05-28 15:13:46.584: E/AndroidRuntime(4458): at com.package.TestRun.registerLocationListeners(TestRun.java:191)logcat中的 05-28 15:13:46.584: E/AndroidRuntime(4458): at com.package.TestRun.registerLocationListeners(TestRun.java:191) 。 我已经实现了如下代码:

  LocationManager lm; LocationManager lmNet; private void registerLocationListeners() { lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); if (myGPSLocationListener == null || mynetworkprovider == null) { createLocationListeners(); } lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER ,0,0,mynetworkprovider); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER ,60000,0,myGPSLocationListener); } private void createLocationListeners() { mynetworkprovider = new LocationListener() { public void onLocationChanged(Location argLocation) { if (argLocation != null) { gps[0] = argLocation.getLatitude(); gps[1] = argLocation.getLongitude(); //Toast.makeText( getApplicationContext(),"Network provider Lat =" + gps[0] + " Lon = " + gps[1] , Toast.LENGTH_SHORT).show(); } //Toast.makeText( getApplicationContext(),"On Location change" , Toast.LENGTH_SHORT).show(); } public void onProviderDisabled(String provider) { // TODO Auto-generated method stub // Toast.makeText( getApplicationContext(),"Disable" , Toast.LENGTH_SHORT).show(); } public void onProviderEnabled(String provider) { // TODO Auto-generated method stub // Toast.makeText( getApplicationContext(),"enabled" , Toast.LENGTH_SHORT).show(); } public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub //Toast.makeText( getApplicationContext(),"Status change" , Toast.LENGTH_SHORT).show(); } }; myGPSLocationListener = new LocationListener() { public void onLocationChanged(Location argLocation) { if (argLocation != null) { gps[0] = argLocation.getLatitude(); gps[1] = argLocation.getLongitude(); //Toast.makeText( getApplicationContext(),"GPS Lat =" + gps[0] + " Lon = " + gps[1] , Toast.LENGTH_SHORT).show(); } //Toast.makeText( getApplicationContext(),"On Location change" , Toast.LENGTH_SHORT).show(); } public void onProviderDisabled(String provider) { // TODO Auto-generated method stub //Toast.makeText( getApplicationContext(),"Disable" , Toast.LENGTH_SHORT).show(); //launchGPS(); } public void onProviderEnabled(String provider) { // TODO Auto-generated method stub //Toast.makeText( getApplicationContext(),"enabled" , Toast.LENGTH_SHORT).show(); } public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub //Toast.makeText( getApplicationContext(),"Status change" , Toast.LENGTH_SHORT).show(); } }; } 

更新 :这是我的logcat:

  05-28 15:42:46.375: E/AndroidRuntime(5585): FATAL EXCEPTION: main 05-28 15:42:46.375: E/AndroidRuntime(5585): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package/com.package.TestRun}: java.lang.IllegalArgumentException: provider=network 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.access$600(ActivityThread.java:122) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.os.Handler.dispatchMessage(Handler.java:99) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.os.Looper.loop(Looper.java:137) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.main(ActivityThread.java:4340) 05-28 15:42:46.375: E/AndroidRuntime(5585): at java.lang.reflect.Method.invokeNative(Native Method) 05-28 15:42:46.375: E/AndroidRuntime(5585): at java.lang.reflect.Method.invoke(Method.java:511) 05-28 15:42:46.375: E/AndroidRuntime(5585): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 05-28 15:42:46.375: E/AndroidRuntime(5585): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 05-28 15:42:46.375: E/AndroidRuntime(5585): at dalvik.system.NativeStart.main(Native Method) 05-28 15:42:46.375: E/AndroidRuntime(5585): Caused by: java.lang.IllegalArgumentException: provider=network 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.os.Parcel.readException(Parcel.java:1331) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.os.Parcel.readException(Parcel.java:1281) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:646) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.location.LocationManager._requestLocationUpdates(LocationManager.java:582) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:446) 05-28 15:42:46.375: E/AndroidRuntime(5585): at com.package.TestRun.registerLocationListeners(TestRun.java:191) 05-28 15:42:46.375: E/AndroidRuntime(5585): at com.package.TestRun.onCreate(TestRun.java:135) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.Activity.performCreate(Activity.java:4465) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 

Android 4.0 API中是否有针对Location Manager更新? 如果有人遇到同样的问题,请分享观点/解决方案链接。

这是一个问题。 看看这个 。

它说:

不要使用直接provider字符串,因为不能保证它在运行时存在。

仅使用从LocationManager获得的providers ,如下所示:

  LocationManager locationManager = (LocationManager)context.getSystemService( Context.LOCATION_SERVICE ); Criteria criteria = new Criteria(); criteria.setAccuracy( Criteria.ACCURACY_COARSE ); String provider = locationManager.getBestProvider( criteria, true ); if ( provider == null ) { Log.e( TAG, "No location provider found!" ); return; } lastLocation = locationManager.getLastKnownLocation(provider); 

要么

locationmanager另一个有用的方法是LocationManager.getAllProviders()

 /** * Returns a list of the names of all known location providers. All * providers are returned, including ones that are not permitted to be * accessed by the calling activity or are currently disabled. * * @return list of Strings containing names of the providers */