我正在开发一个应用程序,我只想在启用GPS时执行一段代码。
我正在使用这段代码检查GPS:
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
现在,我正在使用它:
if (isGPSEnabled) {
gps_off.setVisibility(View.INVISIBLE);
ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(getBaseContext());
locationProvider.getLastKnownLocation()
.subscribe(new Action1<Location>() {
@Override
public void call(Location location) {
currentLatDoubleA = location.getLatitude();
currentLngDoubleA = location.getLongitude();
Toast.makeText(getBaseContext(), "User's location retrieved", Toast.LENGTH_SHORT).show();
}
});
// }
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
retrieveHRequest();
}
}, 2000);
} else {
gps_off.setVisibility(View.VISIBLE);
Snackbar snackbar = Snackbar
.make(coordinatorLayout, "No location detected!", Snackbar.LENGTH_LONG)
.setAction("RETRY", new View.OnClickListener() {
@Override
public void onClick(View view) {
ifLocationAvailable();
}
});
snackbar.setDuration(Snackbar.LENGTH_INDEFINITE);
snackbar.show();
}
问题是,即使在打开GPS之后,Snackbar
仍然会弹出显示No location detected!
消息,这意味着即使在GPS关闭时,应该执行的代码也会被执行在上。
另外需要注意的是,当我关闭它后重新打开应用程序时,GPS开启时应该执行的代码正在执行而没有任何问题。
这里出了什么问题?
请告诉我。
答案 0 :(得分:0)
在您的应用程序中,您希望实现广播接收器以观察改变GPS的状态。然后,只有应用程序才能了解您的GPS状态变化。
此代码可以帮助您
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
LocationManager locationManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
// gps enabled and do your action here } else {
// gps disabled and do you snack bar action
}
}
}