|
|
@@ -26,7 +26,12 @@ import com.mgtech.base_library.R;
|
|
|
import com.mgtech.base_library.bean.GPS;
|
|
|
|
|
|
import java.util.List;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
+import io.reactivex.Observable;
|
|
|
+import io.reactivex.android.schedulers.AndroidSchedulers;
|
|
|
+import io.reactivex.disposables.Disposable;
|
|
|
+import io.reactivex.schedulers.Schedulers;
|
|
|
import pub.devrel.easypermissions.AfterPermissionGranted;
|
|
|
import pub.devrel.easypermissions.EasyPermissions;
|
|
|
|
|
|
@@ -48,6 +53,7 @@ public class GoogleLocationUtil{
|
|
|
|
|
|
private final long MIN_TIME = 10 * 60 * 1000L;
|
|
|
private final float MIN_DISTANCE = 200F;
|
|
|
+ private final long TIME_OUT = 10 * 1000;
|
|
|
public final int REQUEST_LOCATION = 999;
|
|
|
private MyLocationListener myLocationListener = new MyLocationListener();
|
|
|
private LocationManager locationManager;
|
|
|
@@ -106,6 +112,9 @@ public class GoogleLocationUtil{
|
|
|
public void stopLocation(){
|
|
|
if (locationManager !=null)
|
|
|
locationManager.removeUpdates(myLocationListener);
|
|
|
+
|
|
|
+ if (disposable != null && !disposable.isDisposed())
|
|
|
+ disposable.dispose();
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -145,8 +154,11 @@ public class GoogleLocationUtil{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ //超时机制
|
|
|
+ locationTimeOut();
|
|
|
+
|
|
|
Criteria criteria = new Criteria();
|
|
|
- criteria.setAccuracy(Criteria.ACCURACY_COARSE);
|
|
|
+// criteria.setAccuracy(Criteria.ACCURACY_COARSE);
|
|
|
criteria.setAltitudeRequired(false);
|
|
|
criteria.setBearingRequired(false);
|
|
|
criteria.setCostAllowed(true);
|
|
|
@@ -303,4 +315,22 @@ public class GoogleLocationUtil{
|
|
|
pButton.setTypeface(Typeface.DEFAULT_BOLD);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @method locationTimeOut
|
|
|
+ * @description 定位超时
|
|
|
+ * @date: 2020/4/16 16:16
|
|
|
+ * @author: 牛松涛
|
|
|
+ * @param
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ private Disposable disposable;
|
|
|
+ private void locationTimeOut() {
|
|
|
+ disposable = Observable.intervalRange(0, TIME_OUT, 0, 1, TimeUnit.MILLISECONDS)
|
|
|
+ .subscribeOn(Schedulers.io())
|
|
|
+ .observeOn(AndroidSchedulers.mainThread())
|
|
|
+ .doOnComplete(this::getLastKnownLocation).subscribe();
|
|
|
+ }
|
|
|
+
|
|
|
}
|