如何使用按钮单击停止 onLocationChanged() 方法?
How can stop onLocationChanged() method using button click?
我是初学者 android development.I 使用 Gps 服务实现 LocationListener.I 想停止使用按钮单击的 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();
}
}
mlocManager.removeUpdates(mlocListener);
public void stopOnClick(){
locationManager.removeUpdates(this);
}
应该可以工作,因为您的 LocationListener 是由 Fragment 实现的
注意:
不要忘记在片段的 onPause 中取消注册位置侦听器,以避免当服务尝试在 'onLocationChanged' 上查找 TabFragment1 时发生崩溃(想象一下用户在您的应用程序的另一个 fragment/activity 上导航而不按'stopOnClick' 按钮):
@Override
public void onPause() {
locationManager.removeUpdates(this);
super.onPause();
}
我是初学者 android development.I 使用 Gps 服务实现 LocationListener.I 想停止使用按钮单击的 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();
}
}
mlocManager.removeUpdates(mlocListener);
public void stopOnClick(){
locationManager.removeUpdates(this);
}
应该可以工作,因为您的 LocationListener 是由 Fragment 实现的
注意: 不要忘记在片段的 onPause 中取消注册位置侦听器,以避免当服务尝试在 'onLocationChanged' 上查找 TabFragment1 时发生崩溃(想象一下用户在您的应用程序的另一个 fragment/activity 上导航而不按'stopOnClick' 按钮):
@Override
public void onPause() {
locationManager.removeUpdates(this);
super.onPause();
}