私のアプリは2つの別々のProcess
. 私はすべてServices
を1つProcess
に、他のすべてのコンポーネントを別のに持っていProcess
ます。with アクションが から受信されたLocationManger
ときにlastKnownLocation を取得しようとしているときに、デバッガーでオブジェクトがそれを示しているのを見ると、 null を取得しています。助けてくれてありがとう。ここにコードのスニペットがあります-Intent
public int onStartCommand(Intent intent, int flags, int startId)
Activity
Location
LocationManager
Context has changed, operation is not possible
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String action = intent.getAction();
if (action != null) {
if (action.equalsIgnoreCase(Synchronize.ACTION_UPDATE_LOCATION)) {
Location location = getLastKnownLocation();
if (location != null) {
new Synchronize(getApplicationContext()).
updateLocation(prefs.getInt(Utils.PROPERTY_USER_ID, 0),
location.getLatitude(), location.getLongitude(),
Utils.formatDateMilliSecondToUTC(location.getTime()));
}
} else if (action.equalsIgnoreCase(Synchronize.ACTION_SYNC_CONTACTS)) {
new Synchronize(getApplicationContext()).syncContacts();
} else if (action.equalsIgnoreCase(Synchronize.ACTION_SYNC_EVENTS)) {
new Synchronize(getApplicationContext()).syncEvents();
} else if (action.equalsIgnoreCase(Synchronize.ACTION_SYNC_OFFERS)) {
new Synchronize(getApplicationContext()).syncOffers();
} else if (action.equalsIgnoreCase(Synchronize.ACTION_SYNC_DISCOVERS)) {
new Synchronize(getApplicationContext()).syncDiscoverEvents();
}
}
return START_STICKY;
}
private Location getLastKnownLocation() {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
} else {
return locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
return null;
}