Skip to content

Commit 8bc7bce

Browse files
committed
see 11/19 log
1 parent ad1c09b commit 8bc7bce

File tree

5 files changed

+77
-45
lines changed

5 files changed

+77
-45
lines changed

README-CN.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -380,11 +380,13 @@ execCmd : 是否是在root下执行命令
380380

381381
> - **尺寸相关→[SizeUtils.java][size.java]**
382382
```
383-
dp2px, px2dp : dp与px转换
384-
sp2px, px2sp : sp与px转换
385-
applyDimension : 各种单位转换
386-
forceGetViewSize : 在onCreate()即可强行获取View的尺寸
387-
measureView : ListView中提前测量View尺寸(注释萌萌哒)
383+
dp2px, px2dp : dp与px转换
384+
sp2px, px2sp : sp与px转换
385+
applyDimension : 各种单位转换
386+
forceGetViewSize : 在onCreate()中获取视图的尺寸
387+
measureView : 测量视图尺寸
388+
getMeasuredWidth : 获取测量视图宽度
389+
getMeasuredHeight : 获取测量视图高度
388390
```
389391

390392
> - **Snackbar相关→[SnackbarUtils.java][snackbar.java][Demo][snackbar.demo]**

app/src/main/java/com/blankj/androidutilcode/activities/LocationActivity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ protected void onCreate(Bundle savedInstanceState) {
3636
tvAboutLocation = (TextView) findViewById(R.id.tv_about_location);
3737

3838
locationUtils = new LocationUtils(App.getInstance());
39+
//注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);
40+
// 然后执行handler.sendMessage(),更新位置
3941
locationUtils.init(1000, 0, new LocationUtils.OnLocationChangeListener() {
4042
@Override
4143
public void onLocationChanged(Location location) {

update_log.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
###
2+
#### 16/11/19 SizeUtils
3+
#### 16/11/18 完善LocationUtils
4+
#### 16/11/17 完善LocationUtils
25
#### 16/11/16 拼音工具类单独拎出来做了整理
36
#### 16/11/15 完善正则工具类
47
#### 16/11/14 新增启动服务

utilcode/src/main/java/com/blankj/utilcode/utils/LocationUtils.java

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
import android.location.Address;
66
import android.location.Criteria;
77
import android.location.Geocoder;
8+
import android.location.GnssStatus;
9+
import android.location.GpsSatellite;
10+
import android.location.GpsStatus;
811
import android.location.Location;
912
import android.location.LocationListener;
1013
import android.location.LocationManager;
@@ -14,6 +17,7 @@
1417
import android.util.Log;
1518

1619
import java.io.IOException;
20+
import java.util.Iterator;
1721
import java.util.List;
1822
import java.util.Locale;
1923

@@ -69,37 +73,39 @@ public void openGpsSettings() {
6973
* <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>}</p>
7074
* <p>参数1和2,如果参数2不为0,则以参数2为准;参数2为0,则通过时间来定时更新;两者为0,则随时刷新</p>
7175
*
76+
* @param isUseOnce 是否只调用一次
7277
* @param minTime 位置信息更新周期(单位:毫秒)
7378
* @param minDistance 位置变化最小距离:当位置距离变化超过此值时,将更新位置信息(单位:米)
7479
* @param listener 位置刷新的回调接口
75-
*
80+
* @return {@code true}: 初始化成功<br>{@code false}: 初始化失败
7681
*/
77-
public void init(long minTime, long minDistance, OnLocationChangeListener listener) {
78-
if (listener == null) return;
79-
Location location;
80-
String provider = mLocationManager.getBestProvider(getCriteria(), true); // 获取GPS信息
81-
Location location = mLocationManager.getLastKnownLocation(provider); // 通过GPS获取位置
82-
83-
84-
if (!mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) && !mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
82+
public boolean init(boolean isUseOnce, long minTime, long minDistance, OnLocationChangeListener listener) {
83+
if (listener == null) return false;
84+
mListener = listener;
85+
if (!mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
86+
&& !mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
8587
ToastUtils.showShortToastSafe(mContext, "无法定位,请打开定位服务");
8688
openGpsSettings();
8789
}
88-
if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
89-
// 通过网络获取定位(省电,但精确度略低)
90-
location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
91-
if (location != null) {
92-
listener.onLocationChanged(location);
93-
}
94-
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minTime, minDistance, myLocationListener);
95-
} else if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
96-
// 通过Gps获取定位(精确度高,但耗电)
97-
location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
90+
if (!mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
91+
&& !mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
92+
return false;
93+
}
94+
String provider = mLocationManager.getBestProvider(getCriteria(), true);
95+
Location location = mLocationManager.getLastKnownLocation(provider);
96+
// 如果只调用一次
97+
if (isUseOnce) {
9898
if (location != null) {
9999
listener.onLocationChanged(location);
100+
return true;
101+
} else {
102+
return false;
100103
}
101-
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, myLocationListener);
102104
}
105+
if (provider == null) return false;
106+
// 以下是实时调用
107+
mLocationManager.requestLocationUpdates(provider, minTime, minDistance, myLocationListener);
108+
return true;
103109
}
104110

105111
/**

utilcode/src/main/java/com/blankj/utilcode/utils/SizeUtils.java

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.util.Log;
66
import android.util.TypedValue;
77
import android.view.View;
8+
import android.view.ViewGroup;
89

910
/**
1011
* <pre>
@@ -96,7 +97,7 @@ public static float applyDimension(int unit, float value, DisplayMetrics metrics
9697
}
9798

9899
/**
99-
* 在onCreate()即可强行获取View的尺寸
100+
* 在onCreate()中获取视图的尺寸
100101
* <p>需回调onGetSizeListener接口,在onGetSize中获取view宽高</p>
101102
* <p>用法示例如下所示</p>
102103
* <pre>
@@ -136,30 +137,48 @@ public static void setListener(onGetSizeListener listener) {
136137
private static onGetSizeListener mListener;
137138

138139
/**
139-
* ListView中提前测量View尺寸,如headerView
140-
* <p>用的时候去掉注释拷贝到ListView中即可</p>
141-
* <p>参照以下注释代码</p>
140+
* 测量视图尺寸
142141
*
143142
* @param view 视图
143+
* @return arr[0]: 视图宽度, arr[1]: 视图高度
144144
*/
145-
public static void measureViewInLV(View view) {
146-
Log.d("tips", "U should copy the following code.");
147-
/*
148-
ViewGroup.LayoutParams p = view.getLayoutParams();
149-
if (p == null) {
150-
p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
151-
ViewGroup.LayoutParams.WRAP_CONTENT);
145+
public static int[] measureView(View view) {
146+
ViewGroup.LayoutParams lp = view.getLayoutParams();
147+
if (lp == null) {
148+
lp = new ViewGroup.LayoutParams(
149+
ViewGroup.LayoutParams.MATCH_PARENT,
150+
ViewGroup.LayoutParams.WRAP_CONTENT
151+
);
152152
}
153-
int width = ViewGroup.getChildMeasureSpec(0, 0, p.width);
154-
int height;
155-
int tempHeight = p.height;
156-
if (tempHeight > 0) {
157-
height = MeasureSpec.makeMeasureSpec(tempHeight,
158-
MeasureSpec.EXACTLY);
153+
int widthSpec = ViewGroup.getChildMeasureSpec(0, 0, lp.width);
154+
int lpHeight = lp.height;
155+
int heightSpec;
156+
if (lpHeight > 0) {
157+
heightSpec = View.MeasureSpec.makeMeasureSpec(lpHeight, View.MeasureSpec.EXACTLY);
159158
} else {
160-
height = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
159+
heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
161160
}
162-
view.measure(width, height);
163-
*/
161+
view.measure(widthSpec, heightSpec);
162+
return new int[]{view.getMeasuredWidth(), view.getMeasuredHeight()};
163+
}
164+
165+
/**
166+
* 获取测量视图宽度
167+
*
168+
* @param view 视图
169+
* @return 视图宽度
170+
*/
171+
public static int getMeasuredWidth(View view) {
172+
return measureView(view)[0];
173+
}
174+
175+
/**
176+
* 获取测量视图高度
177+
*
178+
* @param view 视图
179+
* @return 视图高度
180+
*/
181+
public static int getMeasuredHeight(View view) {
182+
return measureView(view)[1];
164183
}
165184
}

0 commit comments

Comments
 (0)