Android Geofence监控仅使用gps位置模式

时间:2016-06-07 11:22:41

标签: android gps android-geofence

我正在创建一个使用Geofence监控的应用程序,我已成功实现此功能,但在使用"仅设备"进行测试时遇到了问题。自行使用GPS的位置设置。

我只能使用Device获取位置数据,但是当我尝试添加geofences进行监控时,它总是返回状态代码1000,即GEOFENCE_NOT_AVAILABLE。

在我确认了位置权限

之后调用以下代码来添加geofences
 LocationServices.GeofencingApi.addGeofences(mApiClient, getGeofencingRequest(),
                    mGeofenceRequestIntent).setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(@NonNull Status status) {
                    if(!status.isSuccess()) {
                        Toast.makeText(mContext, String.format("Monitor Geofences %s", status.getStatusCode()), Toast.LENGTH_LONG).show();
                    }
                    else{
                        Toast.makeText(mContext, String.format("Successfully Monitor Geofences %s", status.getStatusCode()), Toast.LENGTH_LONG).show();
                    }
                }
            });

我做错了什么或是我唯一的选择强迫用户使用高精度定位模式的电池省电?

1 个答案:

答案 0 :(得分:0)

默认情况下,基于Google服务的地理围栏不会请求GPS更新。它必须被强迫&#39;为此,您的应用应该按预期再次运行。

它对我有用的方法是将LocationListener实现到包含GoogleAPIClient初始化,GeofencingRequest等的活动文件的公共类中

然后在同一公共类中添加

private LocationManager locationManager;

在onCreate方法结束时跟着这个

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

和onResume一样(&#39; 1000&#39;&#39; 5&#39;分别是以毫秒为单位的更新速率和每次更新的样本数量)

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 5, this);

最后将此添加到onPause,如果您想在应用程序不在前台时节省电量,但​​是您将错过我在此停机期间发生的所有通知

locationManager.removeUpdates(this);

另外,请记住导入所有新包。

如果您在更改系统设置之前能够收到通知(无论准确性如何)而且您没有更改任何其他内容,我相信这可能会解决您的问题。

我注意到你提到你在启用Device Only设置的情况下获取位置数据,但也许只有通过像Maps这样的应用程序才能从该提供商请求gps数据,即使WI-FI,CELLULAR也是如此数据或两者都被禁用。您还可以发布更多代码,以帮助您确定问题所在。