2013-01-16 71 views
1

我有新的华为手机Ascend G330D,板载4.0.4。 问题是“网络”位置提供程序不起作用,并且根本不返回任何坐标。网络位置提供商无法在ICS上工作(华为)

其他事实 1.应用程序是正确─它可以在相当多的Android设备 2. GPS位置提供好的工作 3.谷歌地图应用,即使网络位置完美的作品(即没有全球定位系统)! (我已经取代/ system/app中的NetworkLocation.apk,此后Google应用(Maps,Local)开始使用网络位置,最初它们都不能工作) 4.没有任何第三方应用(来自市场)位置以及

由于地图是不开源的,我看不出这是与应用程序,它使用谷歌API的差别,但我想,谷歌地图只是可以使用地理位置(或授权密钥)的另一个来源...

有没有人有任何想法去挖掘网络位置工作?

+1

的问题与位置提供者使用无关,但与特定设备(或fw)无关。我的程序工作正常,其他程序(除谷歌的)都不工作。我已经从调试器 - 网络提供商检查启用。 –

回答

0

您可以检查此教程完整的例子

Get Current Location coordinates , City name

而且,这里是正在与这两个

  • GPS提供商
  • 网络提供商
我的工作代码

public class MyLocationListener e xtends服务实现LocationListener的{

private static final String TAG = "MyLocationListener"; 

private Context context = null; 

private Location location = null; 
private LocationManager locationManager = null; 

public static boolean isGPSEnabled = false; 
boolean isNetworkEnabled = false; 
boolean canGetLocation = false; 

public double latitude = 0.0; 
public double longitude = 0.0; 
public String location_address = null; 

// The minimum distance to change Updates in meters 
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; 
// The minimum time between updates in milliseconds 
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

public MyLocationListener(Context ctx) { 
    Log.v(TAG + ".MyLocationListener", 
      "MyLocationListener constructor called"); 
    this.context = ctx; 
    getLocationValue(); 
} 

public Location getLocationValue() { 
    Log.v(TAG + ".getLocationValue", "getLocationValue method called"); 

    try { 
     locationManager = (LocationManager) context 
       .getSystemService(LOCATION_SERVICE); 

     isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

     isNetworkEnabled = locationManager 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (isGPSEnabled) { 

      this.canGetLocation = true; 
      Log.v(TAG + ".getLocationValue", "GPS provider enabled"); 
      // Toast.makeText(context, "Gps", 1).show(); 
      if (location == null) { 
       locationManager.requestLocationUpdates(
         LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       if (locationManager != null) { 
        location = locationManager 
          .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
         Log.v(TAG, "Gps Co-ordinates are:" + latitude + " " 
           + longitude); 

        } 
       } 
      } 

     } else if (isNetworkEnabled) { 

      // Toast.makeText(context, "Net", 1).show(); 
      Log.v(TAG + ".getLocationValue", "Network provider enabled"); 
      locationManager.requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, 
        MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 

      if (locationManager != null) { 
       location = locationManager 
         .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
       if (location != null) { 
        latitude = location.getLatitude(); 
        longitude = location.getLongitude(); 
        Log.v(TAG, "Co-ordinates are: " + latitude + " " 
          + longitude); 

       } 
      } 

     } else { 
      showSettingsAlert(); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return location; 
} 

/** 
* Stop using GPS listener Calling this function will stop using GPS in your 
* app 
* */ 
public void stopUsingGPS() { 
    if (locationManager != null) { 
     locationManager.removeUpdates(MyLocationListener.this); 
    } 
} 

public double getLatitude() { 
    if (location != null) { 
     latitude = location.getLatitude(); 
    } 
    return latitude; 
} 

public double getLongitude() { 
    if (location != null) { 
     longitude = location.getLongitude(); 
    } 
    return longitude; 
} 

/** 
* Function to check GPS/wifi enabled 
* 
* @return boolean 
* */ 
public boolean canGetLocation() { 
    return this.canGetLocation; 
} 

/** 
* Function to show settings alert dialog On pressing Settings button will 
* lauch Settings Options 
* */ 
public void showSettingsAlert() { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); 

    alertDialog.setTitle("GPS Settings"); 
    alertDialog 
      .setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

    alertDialog.setPositiveButton("Settings", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        Intent intent = new Intent(
          Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
        context.startActivity(intent); 
       } 
      }); 
    alertDialog.setNegativeButton("Cancel", 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } 
      }); 
    alertDialog.show(); 
} 

@Override 
public void onLocationChanged(Location location) { 
} 

@Override 
public void onProviderDisabled(String provider) { 
} 

@Override 
public void onProviderEnabled(String provider) { 
} 

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

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
}} 

使用上面的代码这种方式,只要你在任何活动

MyLocationListener mylistner = new MyLocationListener(context); 
     double lat = mylistner.latitude; 
     double lon = mylistner.longitude; 

注意想:我也有打击的权限在我的清单

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

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/> 
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
相关问题