我是android开发的初学者。我使用实现LocationListener的Gps服务。我希望使用按钮点击停止onLocationChanged()方法。 我试着这样做,将空值分配给locationManager变量,但它不起作用。
public class TabFragment1 extends Fragment implements LocationListener {
ImageButton btnRUN;
ImageButton btnSTOP;
private LocationManager locationManager;
Context ctx;
private double lat_new, lon_new = 0.0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ctx = container.getContext();
View view = inflater.inflate(R.layout.tab_fragment_1, container, false);
initializeApp(view);
return view;
}
private void initializeApp(View view) {
btnRUN = (ImageButton) view.findViewById(R.id.btnRun);
btnSTOP= (ImageButton) view.findViewById(R.id.btnStop);
btnRUN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
runOnClick();
}
});
btnSTOP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopOnClick();
}
});
}
public void stopOnClick(){
locationManager =null;
}
public void runOnClick() {
locationManager = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 10, this);
}
@Override
public void onLocationChanged(Location location) {
lat_new=location.getLatitude();
lon_new=location.getLongitude();
String str="Lat :"+lat_new +"Lon :"+lon_new;
Toast.makeText(ctx,str,Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(ctx, "Gps turned on ", Toast.LENGTH_LONG).show();
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(ctx, "Gps turned off ", Toast.LENGTH_LONG).show();
}
}
答案 0 :(得分:4)
public void stopOnClick(){
locationManager.removeUpdates(this);
}
应该可以正常工作,因为您的LocationListener是由Fragment
实现的注意: 不要忘记在片段的onPause中取消注册位置监听器,以避免在服务尝试在' onLocationChanged'上找到TabFragment1时发生崩溃。 (想象用户在不按“停止点击”按钮的情况下浏览应用的其他片段/活动):
@Override
public void onPause() {
locationManager.removeUpdates(this);
super.onPause();
}
答案 1 :(得分:0)
mlocManager.removeUpdates(mlocListener);