如何使用按钮单击停止onLocationChanged()方法?

时间:2016-03-08 13:41:15

标签: android gps locationlistener

我是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();
    }


} 

2 个答案:

答案 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);
相关问题