2013-01-16 3 views
1

J'ai nouveau combiné Huawei Ascend G330D avec 4.0.4 à bord. Le problème est que le fournisseur d'emplacement "réseau" ne fonctionne pas et ne renvoie aucune coordonnée du tout.Le fournisseur d'emplacement réseau ne fonctionne pas sur ICS (Huawei)

Les autres faits sont 1. App est correct- cela fonctionne sur un tout à fait quelques appareils Android 2. gps fournisseur de emplacement fonctionne bien 3. application Google Maps fonctionne parfaitement même avec emplacement réseau (sans GPS)! (J'ai remplacé NetworkLocation.apk dans/system/app, après que les applications Google (Maps, Local) ont commencé à travailler avec l'emplacement réseau, initialement ils ne fonctionnaient pas non plus) 4. Aucune application tierce (du marché) ne fonctionne avec le réseau emplacement et

que les cartes ne sont pas open source et je ne vois pas c'est la différence avec l'application qui utilise l'API Google, mais je suppose que Google Maps peut simplement utiliser une autre source de géolocalisation (ou les clés d'autorisation) ...

Est-ce que quelqu'un a des idées où creuser pour que l'emplacement du réseau fonctionne?

+1

Le question n'est pas liée à l'utilisation du fournisseur d'emplacement, mais à un périphérique spécifique (ou fw). Mon programme fonctionne bien, d'autres programmes (à l'exception de google) ne fonctionnent pas non plus. J'ai vérifié à partir du débogueur - le fournisseur de réseau est activé. –

Répondre

0

Vous pouvez vérifier ce tutoriel par exemple complet

Get Current Location coordinates , City name

aussi Voici mon code de travail qui travaille à la fois

  • Fournisseur GPS
  • Fournisseur réseau

public class MyLocationListener e xtends service implémente 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; 
}} 

utilisation au-dessus du code de cette façon, chaque fois que vous voulez dans une activité

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

Remarque: aussi je les autorisations de coup dans mon Manifest

<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" /> 
Questions connexes