我正在开发一个基于侦听器在后台激活的应用程序。在应用程序中,我想捕获用户的当前位置(地址)并将其存储。
在下面的代码中,当我连接到 Wi-Fi 时,应用程序工作得非常好。当我没有连接到 wi-fi 时,“address=gps.getAddress();”行会发生一些事情 并发布变量pendingResponse 设置为false。我什至没有在控制台上得到第二个 log.d 的输出 (Log.d("Your Location",address);
getAddress 是一个简单的函数,它使用纬度和经度来反向地理编码并获取地址。我假设对 getAddress 的调用需要很长时间才能处理,因为我在不使用 Wi-Fi 时的互联网连接速度很慢,因此我陷入了这种情况。
有人可以指导我如何进一步进行。
private class BgTask extends AsyncTask<String, Integer, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
gps = new GPSTracker(context);
}
@Override
protected String doInBackground(String... params) {
String url=params[0];
// check GPS location
if (gps.canGetLocation()) {
Log.d("Your Location", "latitude:" + gps.getLatitude() + ", longitude: " + gps.getLongitude());
address=gps.getAddress();
Log.d("Your Location",address);
responsePending=true;
} else {
Log.d("Your Location"," Location Not Available");
}
return "All Done!";
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}
为 getAddress 函数添加代码
public String getAddress(){
String address="";
// getting address with geocoder using reverse geocoding
Geocoder gcd = new Geocoder(this, Locale.getDefault());
try{
List<Address> addresses = gcd.getFromLocation(getLatitude(), getLongitude(), 1);
if (addresses.size() > 0)
address=addresses.get(0).getAddressLine(0)+addresses.get(0).getAddressLine(1);
}catch(IOException e){
;
}
return address;
}