我正在嘗試獲取用戶位置,無論是網絡位置還是gps
位置或兩者。爲此,我正在運行一個實現LocationListener
的後臺服務。我還在清單文件中添加了所有需要的權限。這裏是我的服務無法獲取用戶位置
public class GetLocation extends Service implements LocationListener {
LocationManager lm;
Location networkLocation, gpsLocation;
@Override
public void onCreate() {
super.onCreate();
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
gpsLocation = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Toast.makeText(getApplicationContext(), "Getting Location Via GPS",
Toast.LENGTH_LONG).show();
}
if (lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
this);
networkLocation = lm
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Toast.makeText(getApplicationContext(),
"Getting location Via Network", Toast.LENGTH_LONG).show();
}
if (gpsLocation != null) {
Toast.makeText(
getApplicationContext(),
"GPSLOCATION: " + gpsLocation.getLatitude() + " , "
+ gpsLocation.getLongitude(), Toast.LENGTH_LONG)
.show();
}
if (networkLocation != null) {
Toast.makeText(
getApplicationContext(),
"NETWORKLOCATION: " + networkLocation.getLatitude() + " , "
+ networkLocation.getLongitude(), Toast.LENGTH_LONG)
.show();
}
if (gpsLocation == null && networkLocation == null) {
Toast.makeText(getApplicationContext(),
"Couldn't get user location", Toast.LENGTH_LONG).show();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread() {
public void run() {
Looper.prepare();
if (gpsLocation != null) {
Log.d("Usman", "GPSLOCATION: " + gpsLocation.getLatitude()
+ " , " + gpsLocation.getLongitude());
}
if (networkLocation != null) {
Log.d("Usman",
"NETWORKLOCATION: " + networkLocation.getLatitude()
+ " , " + networkLocation.getLongitude());
}
if (gpsLocation == null && networkLocation == null) {
Log.d("Usman", "Couldn't get user lcoation");
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Looper.loop();
}
}.start();
return START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onLocationChanged(Location location) {
// do something with this location
Toast.makeText(
getApplicationContext(),
location.getProvider() + " Location Changed:"
+ location.getLatitude() + " , "
+ location.getLongitude(), Toast.LENGTH_LONG).show();
}
@Override
public void onProviderDisabled(String arg0) {
Toast.makeText(getApplicationContext(), arg0 + " Disabled",
Toast.LENGTH_LONG).show();
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(getApplicationContext(), provider + " Enabled",
Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
}
}
在onCreate()方法中,gps和網絡位置都爲空。 任何機構可以告訴我,我錯了
如果您在建築物內進行測試,GPS將不起作用。請出去一次,然後測試。 – 2014-09-02 06:09:11
rü檢查真實設備或Emulater – 2014-09-02 06:10:41
@Dhruti是我坐在建築物的地下室內。但網絡位置呢?是不是應該不是null? – 2014-09-02 06:14:54