GPsStatus switch between GPS_EVENT_STARTED and GPS_EVENT_STOPPED(GPS_EVENT_STARTED 和 GPS_EVENT_STOPPED 之间的 GPSStatus 切换)
问题描述
我在检测 GPS 开关打开/关闭时遇到了一些问题.
I have somme probleme to detect GPS switch turn on/off.
我可以检测到 GPS 已打开,但 Toasts 总是在我的屏幕上绘制.我已启用 GPS"
I can detect GPS switch on but Toasts draws always on my screen. I have "GPS enabled"
GPS 已禁用"
启用 GPS"
GPS 已禁用"
启用 GPS"
GPS 已禁用"
启用 GPS"...
这是我的代码:
final LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
locationManager.addGpsStatusListener(new GpsStatus.Listener() {
@Override
public void onGpsStatusChanged(int event) {
switch (event) {
case GpsStatus.GPS_EVENT_STARTED:
Toast.makeText(HomeActivity.this, "GPS enabled", Toast.LENGTH_LONG).show();
currentLocation = getLocation();
if (currentLocation != null) setUpMapIfNeeded();
break;
case GpsStatus.GPS_EVENT_STOPPED:
Toast.makeText(HomeActivity.this, "GPS disabled", Toast.LENGTH_LONG).show();
break;
default:
}
}
});
推荐答案
我在活动中注册了一个接收器的运气要好得多.BroadcastReceiver 对我来说完美无缺.
I had much better luck just registering a receiver in the activity. The BroadcastReceiver is working flawlessly for me.
private static final String ACTION_GPS = "android.location.PROVIDERS_CHANGED";
private BroadcastReceiver yourReceiver;
@Override
public void onStop() {
super.onStop();
// Do not forget to unregister the receiver!!!
if (yourReceiver != null) {
unregisterReceiver(yourReceiver);
yourReceiver = null;
}
@Override
public void onResume() {
super.onResume();
registerReceiverGPS();
private void registerReceiverGPS() {
if (yourReceiver == null) {
// INTENT FILTER FOR GPS MONITORING
final IntentFilter theFilter = new IntentFilter();
theFilter.addAction(ACTION_GPS);
yourReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
String s = intent.getAction();
if (s != null) {
if (s.equals(ACTION_GPS)) {
checkGPS();
}
}
}
}
};
registerReceiver(yourReceiver, theFilter);
}
}
private void checkGPS() {
Context context = this.getApplicationContext();
if (context != null) {
Button btnGPS = (Button) findViewById(R.id.btnGPS);
if (btnGPS != null) {
LocationManager locationManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
boolean b = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
locationManager = null;
if (b) {
if (btnGPS.getVisibility() != View.GONE) {
btnGPS.setVisibility(View.GONE);
}
} else {
if (btnGPS.getVisibility() != View.VISIBLE) {
btnGPS.setVisibility(View.VISIBLE);
}
}
}
}
}
这篇关于GPS_EVENT_STARTED 和 GPS_EVENT_STOPPED 之间的 GPSStatus 切换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:GPS_EVENT_STARTED 和 GPS_EVENT_STOPPED 之间的 GPSStatus 切换
基础教程推荐
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01