Android AsyncTask无法获取GPS位置
问题描述:
我试图解决这个问题:发送到onProgressUpdate()
方法的坐标等于0.0。使用调试器,我发现方法getLatitude()
,getLongitude()
返回0.0。问题是,这些方法,他们的课程是好的(我以前使用过)。 Here's的MainActivity
简化代码:Android AsyncTask无法获取GPS位置
public class MainActivity extends Activity {
Button btnStart;
MyTask objMyTask;
@Override
public void onCreate(Bundle savedInstanceState) {
...
btnStart = (Button) findViewById(R.id.btnstart);
btnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
objMyTask = new MyTask();
objMyTask.execute();
}
});
}
class MyTask extends AsyncTask<Void, Double, Integer> {
GPSTracker gps;
@Override
protected Integer doInBackground(Void... params)
{
Double latitude, longitude;
long t = System.currentTimeMillis()-6000;
long currentTime = t;
int i = 0;
gps = new GPSTracker(MainActivity.this);
while(i < 5)
{
currentTime = System.currentTimeMillis();
if((currentTime - t) >= 5000)
{
i++;
if(gps.canGetLocation()){
latitude = gps.getLatitude();
longitude = gps.getLongitude();
Double[] resultArray = new Double[2];
resultArray[0] = latitude;
resultArray[1] = longitude;
publishProgress(resultArray);
}else{
gps.showSettingsAlert();
}
t = System.currentTimeMillis();
}
}
return 0;
}
@Override
protected void onProgressUpdate(Double... values) {
super.onProgressUpdate(values);
Toast.makeText(getApplicationContext(), "Latitude: "+values[0]+"\nLongitude"+values[1], Toast.LENGTH_SHORT).show();
}
@Override
protected void onPostExecute(Integer result) {
...
}
}
}
我觉得这个问题是在GPSTracker
构造,也许上下文是不是从创建此线程从来就访问。这里的构造函数:
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
我已经没有想法如何解决这个问题。在此先感谢您的帮助。
答
public GPSTracker(Context context) {
this.mContext = context.getApplicationContext();
getLocation();
}
在你的GPSTracker中,你可以打印出什么东西,当你得到纬度到日志?也许你正在得到0,0因为经纬度从未设置...? – bgs 2013-02-24 23:24:30
使用调试器,我发现GPSTracker内部的经度和纬度都是0,0。但是,正如我所说,这个GPSTracker在主要活动中正常工作。当我创建AsyncTask并在里面使用GPSTracker时,问题就出现了。 – Tom11 2013-02-25 11:08:12
您可以将应用程序上下文而不是本地上下文传递给您的GpsTracker吗? – bgs 2013-02-25 17:24:46