我想覆盖不同类的doInBackground()
方法中的ListenerClass overriden方法,以便在单独的线程中跟踪位置更改。
我有ListenerClass
public class ListenerClass implements LocationListener {
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
}
我在这里实例化它是为了requestLocationUpdates()
,因为它不能为null以便调用该方法。
class AsyncClass extends AsyncTask<Void, String, Void> {
private LocationManager locationManager;
private String provider;
private Criteria criteria;
private TextView textView;
private ListenerClass listenerClass;
public AsyncClass(TextView textView) {
this.textView = textView;
}
@SuppressLint("MissingPermission")
@Override
protected void onPreExecute() {
super.onPreExecute();
listenerClass = new ListenerClass();
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
criteria = new Criteria();
criteria.setPowerRequirement(Criteria.POWER_HIGH);
criteria.setAccuracy(Criteria.ACCURACY_FINE);
provider = locationManager.getBestProvider(criteria, true);
locationManager.requestLocationUpdates(provider, 1000, 10, listenerClass);
}
最后,我想在单独的线程中覆盖位置监听器的方法。
@Override
protected Void doInBackground(Void... voids) {
Looper.prepare();
listenerClass.getClass();//What shall i do here?
Looper.loop();
return null;
}
非常感谢任何帮助!
答案 0 :(得分:0)
您可以覆盖,但需要创建新实例。
@Override
protected Void doInBackground(Void... voids) {
Looper.prepare();
listenerClass = new LocationListener() {
// Other overrided methods....
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
}
Looper.loop();
return null;
}
答案 1 :(得分:0)
您可以覆盖任何侦听器类的方法,但是您不会收到位置更新,因为此新实例未向位置管理器注册
@Override
protected Void doInBackground(Void... voids) {
Looper.prepare();
....
new ListenerClass(){
@Override
public boolean onProviderEnabled(Location location) {
....
}
};
.....
Looper.loop();
return null;
}