0
我正在使用後臺服務獲取特定時間間隔內的位置座標並對數據庫執行更新操作。我已經搜索了許多類似的問題,但沒有幫助。不更新服務線程中的位置
我在服務中創建了線程來執行此操作。 但是我在服務未更新位置時卡住了。我發現方法「requestLocationUpdates()」沒有在線程中調用。事實上,我在線程內使用了Toast方法,也沒有工作。
問題可能在於上述方法中傳入的「上下文」參數。但我無法更正此代碼。
主要關心的是從服務線程獲取準確位置並將其更新到服務器。記下這部分內容,請告訴我正確的代碼或任何其他來源,以更好的方式說明相同的功能。這裏是我的代碼...
public class IcareService extends Service implements LocationListener
{
private Handler mUserLocationHandler = null;
Thread triggerService;
LocationManager lm;
Criteria criteria;
String provider,lat,lon,rid;
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Toast.makeText(this, "Stopping Service and so thread...", Toast.LENGTH_SHORT).show();
mUserLocationHandler.getLooper().quit();
}
@Override
public IBinder onBind(Intent intent)
{
//Not implemented...this sample is only for starting and stopping services.
//Service binding will be covered in another tutorial
return null;
}
@Override
public void onCreate()
{
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
super.onStartCommand(intent, flags, startId);
//Announcement about starting
Toast.makeText(this, "Starting Service...", Toast.LENGTH_SHORT).show();
addLocationListener();
return START_STICKY;
}
private void addLocationListener()
{
triggerService = new Thread(new Runnable(){
public void run(){
try{
Looper.prepare();//Initialise the current thread as a looper.
mUserLocationHandler = new Handler();
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
// Creating a criteria object to retrieve provider
Criteria c = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
// Getting the name of the best provider
final String PROVIDER = lm.getBestProvider(c, true);
//This 2 below statement not executing...
lm.requestLocationUpdates(PROVIDER, 7000, 5, IcareService.this);
Toast.makeText(IcareService.this, "Updating Location...", Toast.LENGTH_SHORT).show();
Thread.sleep(7000);
Looper.loop();
}catch(Exception ex){
ex.printStackTrace();
}
}
}, "LocationThreadicare");
triggerService.start();
}
@Override
public void onLocationChanged(Location location) {
// Getting latitude of the current location
double latitude = location.getLatitude();
lat = Double.toString(latitude);
// Getting longitude of the current location
double longitude = location.getLongitude();
lon= Double.toString(longitude);
Toast.makeText(this, "Gt loc nw sendng to srvr", Toast.LENGTH_SHORT).show();
SendtoServer();
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
SendtoServer(){
.............}
}
你好aseem,我面臨着類似的問題。你有任何解決方案來解決這個問題?請讓我知道,我從最後一週卡住了這個問題,但沒有運氣。先謝謝你。 –
@ amolsawant96Kuli嗨amol我真的很抱歉沒有回覆,因爲我沒有活躍的用戶3個月.....是我已經解決了這個問題3 mnths回來,但儀式現在我忘了幾乎所有bcz我已經完全改變我的軌道從Android開發人員的職業....即時通訊sooo抱歉。我希望你之前已經解決了這個問題。我只能對你的生活說最好的祝福。 – aseem