我想知道是否有在安卓(姜饼)的方式知道此刻的GPS是做一些与否。 让我更清楚一点:我基本上要调用一些方法或API,它会告诉我wheter的GPS是:
1)固定(在状态栏上GPS图标)
2)在搜索修复(在状态条上闪烁GPS图标)
3)非活动(无应用程序是目前使用定位服务,在状态条上没有图标)
现在我知道,你可以使用一个LocationListener的通知这样的变化,但这是我不好,因为我不希望我的代码保持运行等待等待事件,我的代码在计划的时间定期运行,做的东西,然后终止,所以我需要一种方法来检查GPS服务的状态在那一时刻,而不是等待它改变时通知。
GPS上做大量的测试后,我终于找到了解决办法。 当Android应用程序调用位置管理和GPS开始搜索,就会触发一个事件,并在GPS锁定触发另一个事件。 下面的代码演示如何做到这一点。
locationManager = (LocationManager)mContext.getSystemService(LOCATION_SERVICE);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (isGPSEnabled) {
if (locationManager != null) {
// Register GPSStatus listener for events
locationManager.addGpsStatusListener(mGPSStatusListener);
gpslocationListener = new LocationListener() {
public void onLocationChanged(Location loc) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES_GPS, MIN_DISTANCE_CHANGE_FOR_UPDATES_GPS,
gpslocationListener);
}
}
/ * *这是当各种事件发生GPSListener函数调用,如* GPS启动,停止GPS,GPS锁定* /
public Listener mGPSStatusListener = new GpsStatus.Listener() {
public void onGpsStatusChanged(int event) {
switch(event) {
case GpsStatus.GPS_EVENT_STARTED:
Toast.makeText(mContext, "GPS_SEARCHING", Toast.LENGTH_SHORT).show();
System.out.println("TAG - GPS searching: ");
break;
case GpsStatus.GPS_EVENT_STOPPED:
System.out.println("TAG - GPS Stopped");
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
/*
* GPS_EVENT_FIRST_FIX Event is called when GPS is locked
*/
Toast.makeText(mContext, "GPS_LOCKED", Toast.LENGTH_SHORT).show();
Location gpslocation = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(gpslocation != null) {
System.out.println("GPS Info:"+gpslocation.getLatitude()+":"+gpslocation.getLongitude());
/*
* Removing the GPS status listener once GPS is locked
*/
locationManager.removeGpsStatusListener(mGPSStatusListener);
}
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
// System.out.println("TAG - GPS_EVENT_SATELLITE_STATUS");
break;
}
}
};
这是更好地把GPS代码和服务来获得GPS位置信息。
如果调用GPS功能每一次,GPSStatus注册侦听。 GPS_SEARCHING敬酒来,只有当GPS启动时,GPS锁定搜索和GPS_LOCKED敬酒显示一次。 如果我们再次调用GPS功能,如果它被锁定(显示GPS_LOCKED面包)被触发GPS_EVENT_FIRST_FIX事件,如果GPS已经开始寻找它不会显示GPS_SEARCHING吐司(即GPS_STARTED事件不会触发)。 GPS_EVENT_FIRST_FIX事件被触发之后,我的去除GPSstatus监听更新。
当触发事件GPS_EVENT_FIRST_FIX,它能够更好地调用gpslastknownlocation()函数来获取新鲜最新的GPS定位。(其更好地寻找到Android开发者网站获取更多信息)。
我希望这会帮助别人....
不幸的是,有没有简单的方法来获得在Android上的GPS的“当前状态”。 像其他人指出的那样,最好的办法是进行注册,以便onGpsStatusChanged()
事件和跟踪的状态。
如果你喜欢冒险,你可以打电话叫$ dumpsys location
从亚行外壳,以获得GPS提供者的状态。 通常你打电话$ adb shell
从您的桌面,但是你可以编译一个原生的Android外壳应用程序,并调用的exec()
从外壳内获得dumpsys
直接在手机上输出。