gpt4 book ai didi

android - GpsStatus.Listener 仅在 GPS 开启时有效

转载 作者:太空宇宙 更新时间:2023-11-03 12:20:04 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个 GpsStatus.Listener在用户启用或禁用 GPS 时接收事件。如果在我启动应用程序之前开启 GPS,一切正常。在这种情况下,我收到一个 GPS_EVENT_STARTEDGPS_EVENT_STOPPED每次我打开或关闭 GPS 时。

问题是 GPS 在应用程序启动时关闭。在这种情况下,如果我打开或关闭 GPS,我不会收到事件。

有人能给我解释一下吗?

这是我的代码:

public class GPSTracker implements android.location.GpsStatus.Listener {

private final Context context;
private final LocationListener locListener;
private LocationManager locationManager;
private boolean isGPSEnabled = false;

public GPSTracker(Context context, LocationListener locListener) {
this.context = context;
this.locListener = locListener;
setupGPS();
}

private void setupGPS() {
locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
locationManager.addGpsStatusListener(this);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if(!isGPSEnabled) {
Toast.makeText(getContext(), "GPS disabled", Toast.LENGTH_SHORT).show();
} else {
locationManager.removeUpdates(locListener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, locListener);
}
}

@Override
public void onGpsStatusChanged(int event) {
Log.e("onGpsStatusChanged", event+"");
switch(event) {
case GpsStatus.GPS_EVENT_STARTED:
Log.e("onGpsStatusChanged", "GPS_EVENT_STARTED");
break;
case GpsStatus.GPS_EVENT_STOPPED:
Log.e("onGpsStatusChanged", "GPS_EVENT_STOPPED");
break;
}
}

所以,我的 logcat 输出是(如果 GPS 在启动时打开):

  • GpsStatusChanged(24638): 1//应用启动
  • GpsStatusChanged(24638):GPS_EVENT_STARTED
  • GpsStatusChanged(24638): 4//搜索修复
  • GpsStatusChanged(24638):4
  • GpsStatusChanged(24638): 2//关闭 GPS
  • GpsStatusChanged(24638):GPS_EVENT_STOPED

GPS 关闭时的输出:无。

最佳答案

好吧,LocationListener 已提供:

onProviderDisabled() , onProviderEnabled()onStatusChanged()正是为了这个目的。

GpsStatus.Listener 提供有关 GPS 服务内部工作的信息。它不用于告知 GPS 提供商的状态。

LocationListener 提供有关提供商的信息。当您向位置提供程序注册 LocationListener 时,onProviderEnabled()/onProviderDisabled() 会相应地被调用,并且您的应用程序始终可以判断 GPS 何时可用打开或关闭。

试试这个:

public class test extends Activity implements LocationListener{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,10,this);
}


@Override
public void onLocationChanged(Location location) {
}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}

@Override
public void onProviderEnabled(String s) {
if(LocationManager.GPS_PROVIDER.equals(s)){
Toast.makeText(this,"GPS on",Toast.LENGTH_SHORT).show();
}
}

@Override
public void onProviderDisabled(String s) {
if(LocationManager.GPS_PROVIDER.equals(s)){
Toast.makeText(this,"GPS off",Toast.LENGTH_SHORT).show();
}
}
}

关于android - GpsStatus.Listener 仅在 GPS 开启时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18259039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com