Skip to content

Commit ad1c09b

Browse files
committed
see 11/18 log
1 parent 8338c25 commit ad1c09b

File tree

7 files changed

+82
-26
lines changed

7 files changed

+82
-26
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
77
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
88

9+
<!--location-->
10+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
11+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
12+
913
<!--network-->
1014
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
1115
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
@@ -44,6 +48,7 @@
4448
<activity
4549
android:name=".activities.KeyboardActivity"
4650
android:windowSoftInputMode="stateHidden|adjustPan"/>
51+
<activity android:name=".activities.LocationActivity"/>
4752
<activity android:name=".activities.MainActivity">
4853
<intent-filter>
4954
<action android:name="android.intent.action.MAIN"/>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class HandlerActivity extends Activity
2424

2525
private TextView tvAboutHandler0;
2626
private TextView tvAboutHandler1;
27-
HandlerUtils.HandlerHolder handlerHolder;
27+
private HandlerUtils.HandlerHolder handlerHolder;
2828

2929
@Override
3030
protected void onCreate(Bundle savedInstanceState) {

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

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44
import android.content.Context;
55
import android.location.Location;
66
import android.os.Bundle;
7+
import android.os.Looper;
8+
import android.os.Message;
79
import android.widget.TextView;
810

11+
import com.blankj.androidutilcode.App;
912
import com.blankj.androidutilcode.R;
13+
import com.blankj.utilcode.utils.HandlerUtils;
1014
import com.blankj.utilcode.utils.LocationUtils;
15+
import com.blankj.utilcode.utils.LogUtils;
1116

1217
/**
1318
* <pre>
@@ -19,36 +24,40 @@
1924
*/
2025
public class LocationActivity extends Activity {
2126

22-
Context mContext;
23-
TextView tvAboutLocation;
24-
LocationUtils locationUtils;
27+
private TextView tvAboutLocation;
28+
private LocationUtils locationUtils;
29+
private double latitude, longitude;
2530

2631
@Override
2732
protected void onCreate(Bundle savedInstanceState) {
2833
super.onCreate(savedInstanceState);
29-
setContentView(R.layout.activity_activity);
34+
setContentView(R.layout.activity_location);
3035

3136
tvAboutLocation = (TextView) findViewById(R.id.tv_about_location);
32-
mContext = this;
3337

34-
locationUtils = new LocationUtils(this);
35-
locationUtils.init(100, 0, new LocationUtils.OnLocationChangeListener() {
38+
locationUtils = new LocationUtils(App.getInstance());
39+
locationUtils.init(1000, 0, new LocationUtils.OnLocationChangeListener() {
3640
@Override
3741
public void onLocationChanged(Location location) {
38-
double latitude = location.getLatitude();
39-
double longitude = location.getLongitude();
40-
tvAboutLocation.setText("getCountryName:" + locationUtils.getCountryName(latitude, longitude) +
41-
"\ngetLocality:" + locationUtils.getLocality(latitude, longitude) +
42-
"\ngetStreet:" + locationUtils.getStreet(latitude, longitude)
42+
latitude = location.getLatitude();
43+
longitude = location.getLongitude();
44+
tvAboutLocation.setText("latitude: " + latitude +
45+
"\nlongitude: " + longitude +
46+
"\ngetCountryName: " + locationUtils.getCountryName(latitude, longitude) +
47+
"\ngetLocality: " + locationUtils.getLocality(latitude, longitude) +
48+
"\ngetStreet: " + locationUtils.getStreet(latitude, longitude)
4349
);
4450
}
45-
4651
@Override
4752
public void onStatusChanged(String provider, int status, Bundle extras) {
4853

4954
}
5055
});
56+
}
5157

52-
58+
@Override
59+
protected void onDestroy() {
60+
locationUtils.removeAndGc();
61+
super.onDestroy();
5362
}
5463
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ public void keyboardClick(View view) {
5555
startActivity(new Intent(this, KeyboardActivity.class));
5656
}
5757

58+
public void locationClick(View view) {
59+
startActivity(new Intent(this, LocationActivity.class));
60+
}
61+
5862
public void networkClick(View view) {
5963
startActivity(new Intent(this, NetworkActivity.class));
6064
}

app/src/main/res/layout/activity_main.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@
7575
android:text="@string/test.keyboard"
7676
/>
7777

78+
<Button
79+
style="@style/BtnFont"
80+
android:layout_width="match_parent"
81+
android:layout_height="wrap_content"
82+
android:onClick="locationClick"
83+
android:text="@string/test.location"
84+
/>
85+
7886
<Button
7987
style="@style/BtnFont"
8088
android:layout_width="match_parent"

app/src/main/res/values/string.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<string name="test.handler">HandlerUtils Test</string>
1111
<string name="test.image">ImageUtils Test</string>
1212
<string name="test.keyboard">KeyboardUtils Test</string>
13+
<string name="test.location">LocationUtils Test</string>
1314
<string name="test.network">NetworkUtils Test</string>
1415
<string name="test.phone">PhoneUtils Test</string>
1516
<string name="test.process">ProcessUtils Test</string>

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

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Context;
44
import android.content.Intent;
55
import android.location.Address;
6+
import android.location.Criteria;
67
import android.location.Geocoder;
78
import android.location.Location;
89
import android.location.LocationListener;
@@ -28,10 +29,10 @@
2829
*/
2930
public class LocationUtils {
3031

31-
private Context mContext;
32+
private Context mContext;
3233
private OnLocationChangeListener mListener;
33-
private MyLocationListener myLocationListener;
34-
private LocationManager mLocationManager;
34+
private MyLocationListener myLocationListener;
35+
private LocationManager mLocationManager;
3536

3637
/**
3738
* LocationUtils构造函数
@@ -66,15 +67,20 @@ public void openGpsSettings() {
6667
* <p>需添加权限 {@code <uses-permission android:name="android.permission.INTERNET"/>}</p>
6768
* <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>}</p>
6869
* <p>需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>}</p>
70+
* <p>参数1和2,如果参数2不为0,则以参数2为准;参数2为0,则通过时间来定时更新;两者为0,则随时刷新</p>
6971
*
70-
* @param minTime 最小刷新时间(单位:毫秒)
71-
* @param minDistance 最小刷新距离(单位:米)
72+
* @param minTime 位置信息更新周期(单位:毫秒)
73+
* @param minDistance 位置变化最小距离:当位置距离变化超过此值时,将更新位置信息(单位:米)
7274
* @param listener 位置刷新的回调接口
75+
*
7376
*/
7477
public void init(long minTime, long minDistance, OnLocationChangeListener listener) {
7578
if (listener == null) return;
7679
Location location;
77-
mListener = listener;
80+
String provider = mLocationManager.getBestProvider(getCriteria(), true); // 获取GPS信息
81+
Location location = mLocationManager.getLastKnownLocation(provider); // 通过GPS获取位置
82+
83+
7884
if (!mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) && !mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
7985
ToastUtils.showShortToastSafe(mContext, "无法定位,请打开定位服务");
8086
openGpsSettings();
@@ -96,6 +102,28 @@ public void init(long minTime, long minDistance, OnLocationChangeListener listen
96102
}
97103
}
98104

105+
/**
106+
* 设置定位参数
107+
*
108+
* @return {@link Criteria}
109+
*/
110+
private Criteria getCriteria() {
111+
Criteria criteria = new Criteria();
112+
//设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细
113+
criteria.setAccuracy(Criteria.ACCURACY_FINE);
114+
//设置是否要求速度
115+
criteria.setSpeedRequired(false);
116+
// 设置是否允许运营商收费
117+
criteria.setCostAllowed(false);
118+
//设置是否需要方位信息
119+
criteria.setBearingRequired(false);
120+
//设置是否需要海拔信息
121+
criteria.setAltitudeRequired(false);
122+
// 设置对电源的需求
123+
criteria.setPowerRequirement(Criteria.POWER_LOW);
124+
return criteria;
125+
}
126+
99127
/**
100128
* 根据经纬度获取地理位置
101129
*
@@ -104,9 +132,10 @@ public void init(long minTime, long minDistance, OnLocationChangeListener listen
104132
* @return {@link Address}
105133
*/
106134
public Address getAddress(double latitude, double longitude) {
107-
Geocoder gc = new Geocoder(mContext, Locale.getDefault());
135+
Geocoder geocoder = new Geocoder(mContext, Locale.getDefault());
108136
try {
109-
return gc.getFromLocation(latitude, longitude, 1).get(0);
137+
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
138+
if (addresses.size() > 0) return addresses.get(0);
110139
} catch (IOException e) {
111140
e.printStackTrace();
112141
}
@@ -122,7 +151,7 @@ public Address getAddress(double latitude, double longitude) {
122151
*/
123152
public String getCountryName(double latitude, double longitude) {
124153
Address address = getAddress(latitude, longitude);
125-
return address == null ? null : address.getCountryName();
154+
return address == null ? "unknown" : address.getCountryName();
126155
}
127156

128157
/**
@@ -134,7 +163,7 @@ public String getCountryName(double latitude, double longitude) {
134163
*/
135164
public String getLocality(double latitude, double longitude) {
136165
Address address = getAddress(latitude, longitude);
137-
return address == null ? null : address.getLocality();
166+
return address == null ? "unknown" : address.getLocality();
138167
}
139168

140169
/**
@@ -146,7 +175,7 @@ public String getLocality(double latitude, double longitude) {
146175
*/
147176
public String getStreet(double latitude, double longitude) {
148177
Address address = getAddress(latitude, longitude);
149-
return address == null ? null : address.getAddressLine(0);
178+
return address == null ? "unknown" : address.getAddressLine(0);
150179
}
151180

152181
/**

0 commit comments

Comments
 (0)