在我的應用中,一個活動啓動一個服務。該服務通過onLocatioChanged方法獲取基於網絡的地理位置,並將其寫入共享首選項。然後調用它自己的stopSelf();方法。回到我的活動中,我再次從Shared Prefs中讀取地理位置。更新服務中的地理位置活動時的時間問題(使用共享首選項將服務地理位置從服務傳輸到活動)
我的代碼實際上起作用,唯一的問題是我的Activity從共享首選項讀出的地理位置始終來自服務的私密開始。 服務需要幾毫秒才能獲得地理位置 - 在此期間,活動讀取了過時的(以前的)地理位置。 我搜索了論壇,試圖在新線程中啓動Servive,並在Thread Thread中使用Thread Thread()引入了等待時間。目前爲止沒有任何工作
從我Acivity相關的代碼開始GeoServce.class,並讀取共享偏好設置:
btnGeoPos.setOnLongClickListener (new View.OnLongClickListener(){
public boolean onLongClick(View v) {
startService(new Intent(getApplicationContext(), GeoService.class));
SharedPreferences mPrefs = getApplicationContext().getSharedPreferences("CurrentLoc", MODE_PRIVATE);
DisplayLoc = mPrefs.getString("LocationTransfer", "not available");
Toast.makeText(getApplicationContext()," GeoService retrieved: "+DisplayLoc, Toast.LENGTH_LONG).show();
return true; //LongClick was consumed
}
});
這是寫入geoposition到SharedPrefs我的服務類,它工作得很好本身:
public class GeoService extends Service {
Location location = null;
LocationManager lm;
LocationListener ll;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
public void onCreate() {
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
ll = new MyLocationListener();
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1,1000, ll);
}
public void onStart(Intent intent, int startiD){}
private class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
String message = String.format("Current Location \n Longitude: %1$s \n Latitude: %2$s",location.getLongitude(), location.getLatitude());
Toast.makeText(GeoService.this, message, Toast.LENGTH_LONG).show();
SharedPreferences mPrefs = GeoService.this.getSharedPreferences("CurrentLoc", MODE_PRIVATE);
SharedPreferences.Editor editor1 = mPrefs.edit();
editor1.putString("LocationTransfer", message); // LocationTransfer is the key, message is the content passed
editor1.commit();
lm.removeUpdates(ll);
stopSelf();
}
public void onStatusChanged(String s, int i, Bundle b) {}
public void onProviderDisabled(String s) {
Toast.makeText(GeoService.this,"Network Location turned off",Toast.LENGTH_LONG).show();
}
public void onProviderEnabled(String s) {}
}// End inner class
}// End Class
這個路障讓我搜索自周以來,我會感謝所有幫助, !