2012-05-28 99 views
3

我在我的應用程序中使用Location Manager進行GPS跟蹤。該應用在Android 2.2,2.3.3仿真器和設備中使用時返回適當的位置。但是,奇怪的是,我在模擬器4.0.2測試了應用程序。它返回力關閉錯誤05-28 15:13:46.584: E/AndroidRuntime(4458): at com.package.TestRun.registerLocationListeners(TestRun.java:191)logcat。我已經實現如下代碼:位置管理器不工作在Android 4.0.2模擬器

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(); 

         } 
      }; 
} 

UPDATE:這是我的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任何更新?如果有人遇到同樣的問題,請分享觀點/解決方案鏈接。

+0

你加GPS的支持,你的模擬器? – breceivemail

+0

是的,我有... –

+0

添加完整的LogCat – breceivemail

回答

2

這是一個問題。看看this

它說:

不要使用直接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 
*/