我正在尝试获取用户位置,无论是网络位置还是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