├── .gitignore
├── .idea
├── encodings.xml
├── gradle.xml
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── vcs.xml
├── README.md
├── app
├── .gitignore
├── build.gradle
├── libs
│ ├── BaiduLBS_Android.jar
│ └── armeabi-v7a
│ │ ├── libBaiduMapSDK_base_v4_3_2.so
│ │ ├── libBaiduMapSDK_map_v4_3_2.so
│ │ └── liblocSDK7a.so
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── downofflinemap
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── downofflinemap
│ │ │ ├── DownLoadOffLineMapActivity.java
│ │ │ ├── MyApplication.java
│ │ │ ├── adapter
│ │ │ ├── CityExpandableAdapter.java
│ │ │ └── DownloadedMapsAdapter.java
│ │ │ ├── broadcastReceiver
│ │ │ └── ConnectionChangeReceiver.java
│ │ │ └── interfaces
│ │ │ ├── NetStatusCallBack.java
│ │ │ └── UpdateFinishedCallBack.java
│ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ ├── back_n.png
│ │ ├── back_n_press.png
│ │ ├── citylist_normal.xml
│ │ ├── citylist_press.xml
│ │ ├── delete_all.png
│ │ ├── delete_all_bg.xml
│ │ ├── delete_all_normal.xml
│ │ ├── delete_selector.xml
│ │ ├── download_able_hight.png
│ │ ├── download_all_bg.xml
│ │ ├── download_all_bg_grey.xml
│ │ ├── download_back_selecter.xml
│ │ ├── download_disable_grey.png
│ │ ├── download_grey.png
│ │ ├── download_hight.png
│ │ ├── download_normal.xml
│ │ ├── download_press.xml
│ │ ├── downloadiv.png
│ │ ├── ic_launcher_background.xml
│ │ ├── icon_down.png
│ │ ├── pause_all_normal.xml
│ │ ├── pause_all_press.xml
│ │ ├── pause_grey.png
│ │ ├── pause_hight.png
│ │ ├── search_clear_normal.png
│ │ └── search_clear_pressed.png
│ │ ├── layout
│ │ ├── activity_main.xml
│ │ ├── back_dialog.xml
│ │ ├── citys_item.xml
│ │ ├── download_item.xml
│ │ └── downloadoffpage.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── com
│ └── downofflinemap
│ └── ExampleUnitTest.java
├── build.gradle
├── display
└── ceshi.gif
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 | .externalNativeBuild
10 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
17 |
18 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | 1.8
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BaiduMapOffLine
2 | 高仿百度地图离线地图下载
3 |
4 | ### 效果图
5 | 
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the ART/Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # Generated files
12 | bin/
13 | gen/
14 | out/
15 |
16 | # Gradle files
17 | .gradle/
18 | build/
19 |
20 | # Local configuration file (sdk path, etc)
21 | local.properties
22 |
23 | # Proguard folder generated by Eclipse
24 | proguard/
25 |
26 | # Log Files
27 | *.log
28 |
29 | # Android Studio Navigation editor temp files
30 | .navigation/
31 |
32 | # Android Studio captures folder
33 | captures/
34 |
35 | # IntelliJ
36 | *.iml
37 | .idea/workspace.xml
38 | .idea/tasks.xml
39 | .idea/gradle.xml
40 | .idea/assetWizardSettings.xml
41 | .idea/dictionaries
42 | .idea/libraries
43 | .idea/caches
44 |
45 | # Keystore files
46 | # Uncomment the following line if you do not want to check your keystore files in.
47 | #*.jks
48 |
49 | # External native build folder generated in Android Studio 2.2 and later
50 | .externalNativeBuild
51 |
52 | # Google Services (e.g. APIs or Firebase)
53 | google-services.json
54 |
55 | # Freeline
56 | freeline.py
57 | freeline/
58 | freeline_project_description.json
59 |
60 | # fastlane
61 | fastlane/report.xml
62 | fastlane/Preview.html
63 | fastlane/screenshots
64 | fastlane/test_output
65 | fastlane/readme.md
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 25
5 | defaultConfig {
6 | applicationId "com.downofflinemap"
7 | minSdkVersion 19
8 | targetSdkVersion 21
9 | versionCode 1
10 | versionName "1.0"
11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
12 | }
13 | sourceSets {
14 | main {
15 | jniLibs.srcDir 'libs'
16 | }
17 |
18 | }
19 | buildTypes {
20 | release {
21 | minifyEnabled false
22 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
23 | }
24 | }
25 | }
26 |
27 | dependencies {
28 | implementation fileTree(dir: 'libs', include: ['*.jar'])
29 | implementation 'com.android.support:appcompat-v7:25+'
30 | implementation 'com.android.support.constraint:constraint-layout:1.1.0'
31 | testImplementation 'junit:junit:4.12'
32 | androidTestImplementation 'com.android.support.test:runner:1.0.2'
33 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
34 | }
35 |
--------------------------------------------------------------------------------
/app/libs/BaiduLBS_Android.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/libs/BaiduLBS_Android.jar
--------------------------------------------------------------------------------
/app/libs/armeabi-v7a/libBaiduMapSDK_base_v4_3_2.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/libs/armeabi-v7a/libBaiduMapSDK_base_v4_3_2.so
--------------------------------------------------------------------------------
/app/libs/armeabi-v7a/libBaiduMapSDK_map_v4_3_2.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/libs/armeabi-v7a/libBaiduMapSDK_map_v4_3_2.so
--------------------------------------------------------------------------------
/app/libs/armeabi-v7a/liblocSDK7a.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/libs/armeabi-v7a/liblocSDK7a.so
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/downofflinemap/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.downofflinemap;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumented test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() throws Exception {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.downofflinemap", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
13 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/java/com/downofflinemap/DownLoadOffLineMapActivity.java:
--------------------------------------------------------------------------------
1 | package com.downofflinemap;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.app.Activity;
5 | import android.app.Dialog;
6 | import android.content.Context;
7 | import android.content.IntentFilter;
8 | import android.net.ConnectivityManager;
9 | import android.os.Bundle;
10 | import android.util.Log;
11 | import android.view.Gravity;
12 | import android.view.LayoutInflater;
13 | import android.view.View;
14 | import android.view.View.OnClickListener;
15 | import android.view.Window;
16 | import android.view.WindowManager;
17 | import android.widget.AdapterView;
18 | import android.widget.AdapterView.OnItemClickListener;
19 | import android.widget.ExpandableListView;
20 | import android.widget.ExpandableListView.OnChildClickListener;
21 | import android.widget.ExpandableListView.OnGroupClickListener;
22 | import android.widget.ImageView;
23 | import android.widget.LinearLayout;
24 | import android.widget.ListView;
25 | import android.widget.RelativeLayout;
26 | import android.widget.TextView;
27 | import android.widget.Toast;
28 |
29 | import com.baidu.mapapi.map.offline.MKOLSearchRecord;
30 | import com.baidu.mapapi.map.offline.MKOLUpdateElement;
31 | import com.baidu.mapapi.map.offline.MKOfflineMap;
32 | import com.baidu.mapapi.map.offline.MKOfflineMapListener;
33 | import com.downofflinemap.adapter.CityExpandableAdapter;
34 | import com.downofflinemap.adapter.DownloadedMapsAdapter;
35 | import com.downofflinemap.broadcastReceiver.ConnectionChangeReceiver;
36 | import com.downofflinemap.interfaces.NetStatusCallBack;
37 | import com.downofflinemap.interfaces.UpdateFinishedCallBack;
38 |
39 | import java.util.ArrayList;
40 | import java.util.List;
41 |
42 |
43 | public class DownLoadOffLineMapActivity extends Activity implements OnClickListener,
44 | MKOfflineMapListener ,UpdateFinishedCallBack,NetStatusCallBack{
45 |
46 | private ImageView download_back;
47 | private TextView citylist_top_tv1;
48 | private TextView citylist_top_tv2;
49 | private ListView downloadedMapsView;
50 | private LinearLayout citylist_ll;
51 | private RelativeLayout localmap_layout;
52 | private MKOfflineMap mOffline = null;
53 | private ExpandableListView cityExpandable_lv;
54 | private ArrayList downloadedMaps =new ArrayList();
55 | private DownloadedMapsAdapter lAdapter = null;
56 | private LinearLayout description_ll;
57 | private LinearLayout delete_all_ll;
58 | private LinearLayout download_all_ll;
59 | private LinearLayout pause_all_ll;
60 |
61 |
62 | private CityExpandableAdapter cityExpandAdapter;
63 | private ImageView download_all_iv;
64 | private ImageView pause_all_iv;
65 | private TextView download_all_tv;
66 | private TextView pause_all_tv;
67 | //初始化网络状态广播
68 | private ConnectionChangeReceiver myReceiver;
69 | private String Tag = "DownLoadOffLineMapActivity";
70 |
71 |
72 |
73 | @Override
74 | protected void onCreate(Bundle savedInstanceState) {
75 |
76 | super.onCreate(savedInstanceState);
77 | requestWindowFeature(Window.FEATURE_NO_TITLE);
78 | setContentView(R.layout.downloadoffpage);
79 | mOffline = new MKOfflineMap();
80 | mOffline.init(this);
81 | findView();
82 | initView();
83 | registNetWorkConnectionReceiver();
84 |
85 |
86 | }
87 |
88 | /**
89 | * 注册网络状态变化的广播
90 | */
91 | private void registNetWorkConnectionReceiver() {
92 | //网络状态
93 | IntentFilter filterz = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
94 | myReceiver = new ConnectionChangeReceiver(this);
95 | this.registerReceiver(myReceiver, filterz);
96 | }
97 |
98 | @Override
99 | protected void onResume() {
100 | updateView();
101 | cityExpandAdapter.notifyDataSetChanged();
102 | initBottomButtonBg();
103 | super.onResume();
104 | }
105 |
106 | /**
107 | * 更改底部按钮的bg
108 | */
109 | private void initBottomButtonBg() {
110 | downloadedMaps = mOffline.getAllUpdateInfo();
111 | if (downloadedMaps==null) {
112 | downloadedMaps =new ArrayList();
113 | }
114 | if (downloadedMaps.size() > 0) {
115 | ArrayList pauseDates = new ArrayList();
116 | ArrayList downloadDates = new ArrayList();
117 | for (MKOLUpdateElement bean : downloadedMaps) {
118 | if (bean.status == 1 || bean.status == 2) {
119 | pauseDates.add(bean);
120 | } else if (bean.status == 3||bean.status == 8) {
121 | downloadDates.add(bean);
122 | }
123 |
124 | }
125 | if (pauseDates.size() > 0) {
126 | pause_all_ll.setBackgroundResource(R.drawable.pause_all_press);
127 | pause_all_iv.setBackgroundResource(R.drawable.pause_hight);
128 | pause_all_tv.setTextColor(getResources().getColor(R.color.white));
129 | } else {
130 | pause_all_ll.setBackgroundResource(R.drawable.pause_all_normal);
131 | pause_all_iv.setBackgroundResource(R.drawable.pause_grey);
132 | pause_all_tv.setTextColor(getResources().getColor(R.color.grey));
133 | }
134 | if (downloadDates.size() > 0) {
135 | download_all_iv
136 | .setBackgroundResource(R.drawable.download_hight);
137 | download_all_tv.setTextColor(getResources().getColor(
138 | R.color.white));
139 | download_all_ll
140 | .setBackgroundResource(R.drawable.download_all_bg);
141 | } else {
142 | download_all_iv.setBackgroundResource(R.drawable.download_grey);
143 | download_all_tv.setTextColor(getResources()
144 | .getColor(R.color.grey));
145 | download_all_ll
146 | .setBackgroundResource(R.drawable.download_all_bg_grey);
147 | }
148 | }
149 |
150 | }
151 |
152 | private void initView() {
153 | ArrayList> child = new ArrayList>();
154 |
155 | // 获取所有支持离线地图的城市
156 | final ArrayList group = mOffline
157 | .getOfflineCityList();
158 | for (MKOLSearchRecord bean : group) {
159 |
160 | if (bean.childCities != null) {
161 | ArrayList list = new ArrayList();
162 | list.add(bean);
163 | for (MKOLSearchRecord bean_ : bean.childCities) {
164 | list.add(bean_);
165 | }
166 | child.add(list);
167 | } else {
168 | ArrayList list = new ArrayList();
169 | child.add(list);
170 | }
171 |
172 | }
173 | initCityExpandableListView(group,child);
174 | initDownloadedMapsView();
175 | // 获取已下过的离线地图信息
176 | downloadedMaps = mOffline.getAllUpdateInfo();
177 | if (downloadedMaps == null) {
178 | downloadedMaps = new ArrayList();
179 | }
180 | if (downloadedMaps.isEmpty()) {
181 | description_ll.setVisibility(View.VISIBLE);
182 | citylist_ll.setVisibility(View.GONE);
183 | localmap_layout.setVisibility(View.GONE);
184 | } else {
185 | localmap_layout.setVisibility(View.VISIBLE);
186 | citylist_ll.setVisibility(View.GONE);
187 | description_ll.setVisibility(View.GONE);
188 | }
189 | }
190 | /**
191 | * 初始化CityExpandableListView的item点击事件
192 | */
193 | private void initCityExpandableListView(final ArrayList group,final ArrayList> child) {
194 | cityExpandAdapter = new CityExpandableAdapter(this, group, child,
195 | mOffline);
196 | cityExpandable_lv.setAdapter(cityExpandAdapter);
197 | cityExpandable_lv.setOnGroupClickListener(new OnGroupClickListener() {
198 |
199 | @SuppressLint("WrongConstant")
200 | @Override
201 | public boolean onGroupClick(ExpandableListView arg0, View view,
202 | int arg2, long arg3) {
203 | MKOLSearchRecord bean = group.get(arg2);
204 | if (bean.childCities == null) {
205 | if (getDownloadingCitys() > 25) {
206 | Log.i(Tag, "==-----" + getDownloadingCitys());
207 | Toast.makeText(DownLoadOffLineMapActivity.this, "超过最大同时下载数", Toast.LENGTH_SHORT).show();
208 | return true;
209 | }
210 | if (!getUpdatedCitys().contains(1)) {
211 | mOffline.start(1);
212 | }
213 | int cityid = bean.cityID;
214 | if (getUpdatedCitys().contains(cityid)) {
215 | Toast.makeText(DownLoadOffLineMapActivity.this, "已添加到下载列表", 0)
216 | .show();
217 | switchToDownLoad();
218 | } else {
219 | mOffline.start(cityid);
220 | Toast.makeText(DownLoadOffLineMapActivity.this, "已添加到下载任务", 0)
221 | .show();
222 | }
223 |
224 | updateView();
225 | cityExpandAdapter.notifyDataSetChanged();
226 | return true;
227 | } else {
228 | return false;// false 代表group展开
229 | }
230 |
231 | }
232 | });
233 | cityExpandable_lv.setOnChildClickListener(new OnChildClickListener() {
234 |
235 | @SuppressLint("WrongConstant")
236 | @Override
237 | public boolean onChildClick(ExpandableListView arg0, View view,
238 | int groupPosition, int childPosition, long arg4) {
239 | MKOLSearchRecord bean = child.get(groupPosition).get(
240 | childPosition);
241 | int cityid = bean.cityID;
242 | if (!getUpdatedCitys().contains(1)) {
243 | mOffline.start(1);
244 | }
245 | if (getUpdatedCitys().contains(cityid)) {
246 |
247 | Toast.makeText(DownLoadOffLineMapActivity.this, "已添加到下载列表", 0)
248 | .show();
249 | switchToDownLoad();
250 |
251 | } else {
252 | if (bean.cityType == 1) {
253 | if (getDownloadingCitys() + bean.childCities.size() > 25) {
254 | Log.i(Tag, "==-----" + getDownloadingCitys());
255 | Toast.makeText(DownLoadOffLineMapActivity.this, "超过最大同时下载数", Toast.LENGTH_SHORT).show();
256 | return true;
257 | }
258 | } else {
259 | if (getDownloadingCitys() > 25) {
260 | Log.i(Tag, "==-----" + getDownloadingCitys());
261 | Toast.makeText(DownLoadOffLineMapActivity.this, "超过最大同时下载数", Toast.LENGTH_SHORT).show();
262 | return true;
263 | }
264 | }
265 | mOffline.start(cityid);
266 | if (childPosition == 0) {
267 | switchToDownLoad();
268 | }
269 | Toast.makeText(DownLoadOffLineMapActivity.this, "已添加到下载任务", 0)
270 | .show();
271 | }
272 | updateView();
273 | cityExpandAdapter.notifyDataSetChanged();
274 | return false;
275 | }
276 | });
277 | }
278 |
279 | /**
280 | * 初始化下载城市列表的listView和item点击事件
281 | */
282 | private void initDownloadedMapsView() {
283 | lAdapter = new DownloadedMapsAdapter(this,mOffline.getAllUpdateInfo(),this);
284 | downloadedMapsView.setAdapter(lAdapter);
285 | downloadedMapsView.setOnItemClickListener(new OnItemClickListener() {
286 |
287 | @Override
288 | public void onItemClick(AdapterView> arg0, View view, int arg2,
289 | long arg3) {
290 | MKOLUpdateElement bean = downloadedMaps.get(arg2);
291 | final int cityid = bean.cityID;
292 | TextView tv = (TextView) view.findViewById(R.id.citydelete_tv);
293 |
294 | if (bean.status == 1) {// 正在下载
295 | mOffline.pause(cityid);
296 | tv.setText("已暂停");
297 |
298 | } else if (bean.status == 2) {// 等待下载
299 | mOffline.pause(cityid);
300 | tv.setText("已暂停");
301 | } else if (bean.status == 3) {// 已暂停
302 | mOffline.start(cityid);
303 | tv.setText("暂停下载");
304 | }
305 | updateView();
306 | initBottomButtonBg();
307 | }
308 | });
309 | downloadedMapsView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
310 | @Override
311 | public boolean onItemLongClick(AdapterView> parent, View view, int position, long id) {
312 | MKOLUpdateElement bean = downloadedMaps.get(position);
313 | final int cityid = bean.cityID;
314 | deleteOfflineMapDialog(cityid);
315 | return false;
316 | }
317 | });
318 | }
319 |
320 | /**
321 | * 获取所有已下过的离线地图的城市ID
322 | * @return
323 | */
324 | public ArrayList getUpdatedCitys() {
325 | ArrayList arrays = new ArrayList();
326 | // 获取已下过的离线地图信息
327 | downloadedMaps = mOffline.getAllUpdateInfo();
328 | if (downloadedMaps==null) {
329 | downloadedMaps =new ArrayList();
330 | }
331 | if (downloadedMaps.size() != 0) {
332 | for (MKOLUpdateElement bean_ : downloadedMaps) {
333 | arrays.add(bean_.cityID);
334 | }
335 | }
336 | return arrays;
337 | }
338 |
339 | /**
340 | * 删除离线地图的对话框
341 | * @param cityid
342 | */
343 | private void deleteOfflineMapDialog(final int cityid) {
344 | View v = LayoutInflater.from(this).inflate(R.layout.back_dialog, null);
345 | final Dialog dialog_c = new Dialog(this, R.style.DialogStyle);
346 | dialog_c.setCanceledOnTouchOutside(true);
347 | dialog_c.show();
348 | Window window = dialog_c.getWindow();
349 | WindowManager.LayoutParams lp = window.getAttributes();
350 | window.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
351 | lp.width = dip2px(this, 300); // 宽度
352 | lp.height = dip2px(this, 230); // 高度
353 | // lp.alpha = 0.7f; // 透明度
354 | window.setAttributes(lp);
355 | window.setContentView(v);
356 | TextView confirm_tv = (TextView) v.findViewById(R.id.confirm_tv);
357 | TextView cancel_tv = (TextView) v.findViewById(R.id.cancel_tv);
358 | cancel_tv.setOnClickListener(new OnClickListener() {
359 |
360 | @Override
361 | public void onClick(View v) {
362 | dialog_c.dismiss();
363 | }
364 | });
365 | confirm_tv.setOnClickListener(new OnClickListener() {
366 |
367 | @Override
368 | public void onClick(View v) {
369 |
370 | if (cityid == -1) {
371 | downloadedMaps = mOffline.getAllUpdateInfo();
372 | if (downloadedMaps == null) {
373 | downloadedMaps = new ArrayList();
374 | }
375 | if (!downloadedMaps.isEmpty()) {
376 | for (MKOLUpdateElement bean : downloadedMaps) {
377 | mOffline.remove(bean.cityID);
378 | }
379 | }
380 | } else {
381 | mOffline.remove(cityid);
382 | }
383 | dialog_c.dismiss();
384 | updateView();
385 | initBottomButtonBg();
386 | downloadedMaps = mOffline.getAllUpdateInfo();
387 | if (downloadedMaps==null||downloadedMaps.isEmpty()) {
388 | description_ll.setVisibility(View.VISIBLE);
389 | citylist_ll.setVisibility(View.GONE);
390 | localmap_layout.setVisibility(View.GONE);
391 | }
392 |
393 | }
394 | });
395 |
396 | }
397 |
398 | public static int dip2px(Context context, float dpValue) {
399 | final float scale = context.getResources().getDisplayMetrics().density;
400 | return (int) (dpValue * scale + 0.5f);
401 | }
402 |
403 | @Override
404 | protected void onPause() {
405 | pauseAllUnDownLoadCity();
406 |
407 | super.onPause();
408 | }
409 |
410 | /**
411 | * 将所有未下载完成的城市暂停
412 | */
413 | private void pauseAllUnDownLoadCity() {
414 | ArrayList downloadedMaps = mOffline.getAllUpdateInfo();
415 | if (downloadedMaps != null && !downloadedMaps.isEmpty()) {
416 | for (MKOLUpdateElement bean : downloadedMaps) {
417 | if (bean.status == 1 || bean.status == 2) {
418 | mOffline.pause(bean.cityID);
419 |
420 | }
421 | }
422 | }
423 | updateView();
424 | initBottomButtonBg();
425 | }
426 |
427 | @Override
428 | protected void onDestroy() {
429 | /**
430 | * 退出时,销毁离线地图模块
431 | */
432 | mOffline.destroy();
433 | unregisterReceiver(myReceiver);
434 | super.onDestroy();
435 | }
436 |
437 |
438 | /**
439 | * 开始下载所有的未下载完成的城市
440 | */
441 | private void startDownLoadAllCitys() {
442 | downloadedMaps = mOffline.getAllUpdateInfo();
443 | if (downloadedMaps==null) {
444 | downloadedMaps =new ArrayList();
445 | }
446 | if (!downloadedMaps.isEmpty()) {
447 | for (MKOLUpdateElement bean : downloadedMaps) {
448 | if (bean.status == 3) {
449 | mOffline.start(bean.cityID);
450 | // threadPoolUtil.downloadCity(bean.cityID);
451 | }else if (bean.status == 8) {
452 | mOffline.remove(bean.cityID);
453 | mOffline.start(bean.cityID);
454 | }
455 | }
456 | lAdapter.notify(downloadedMaps);
457 | }
458 | initBottomButtonBg();
459 | }
460 |
461 | /**
462 | * 获取正在下载或者等待下载的城市数量
463 | *
464 | * @return
465 | */
466 | private Integer getDownloadingCitys() {
467 | int downloadingSize = 0;
468 | downloadedMaps = mOffline.getAllUpdateInfo();
469 | if (downloadedMaps == null) {
470 | return downloadingSize;
471 | }
472 |
473 | if (!downloadedMaps.isEmpty()) {
474 | for (MKOLUpdateElement bean : downloadedMaps) {
475 | if (bean.status == 1 || bean.status == 2) {
476 | downloadingSize++;
477 | }
478 | }
479 | }
480 | return downloadingSize;
481 | }
482 |
483 |
484 |
485 | /**
486 | * 更新下载管理列表
487 | */
488 | public void updateView() {
489 | downloadedMaps = mOffline.getAllUpdateInfo();
490 | if (downloadedMaps == null) {
491 | downloadedMaps = new ArrayList();
492 | }
493 | lAdapter.notify(downloadedMaps);
494 | }
495 |
496 | private void findView() {
497 |
498 | download_all_tv = (TextView) findViewById(R.id.download_all_tv);
499 | pause_all_tv = (TextView) findViewById(R.id.pause_all_tv);
500 |
501 | download_all_iv = (ImageView) findViewById(R.id.download_all_iv);
502 | pause_all_iv = (ImageView) findViewById(R.id.pause_all_iv);
503 | delete_all_ll = (LinearLayout) findViewById(R.id.delete_all_ll);
504 | download_all_ll = (LinearLayout) findViewById(R.id.download_all_ll);
505 | pause_all_ll = (LinearLayout) findViewById(R.id.pause_all_ll);
506 |
507 | download_back = (ImageView) findViewById(R.id.download_back);
508 | citylist_top_tv1 = (TextView) findViewById(R.id.citylist_top_tv1);
509 | citylist_top_tv2 = (TextView) findViewById(R.id.citylist_top_tv2);
510 | downloadedMapsView = (ListView) findViewById(R.id.localmaplist);
511 | citylist_ll = (LinearLayout) findViewById(R.id.citylist_ll);
512 | localmap_layout = (RelativeLayout) findViewById(R.id.localmap_layout);
513 | description_ll = (LinearLayout) findViewById(R.id.description_ll);
514 | cityExpandable_lv = (ExpandableListView) findViewById(R.id.cityExpandable_lv);
515 | cityExpandable_lv.setGroupIndicator(null);
516 | download_back.setOnClickListener(this);
517 | citylist_top_tv1.setOnClickListener(this);
518 | citylist_top_tv2.setOnClickListener(this);
519 |
520 | delete_all_ll.setOnClickListener(this);
521 | download_all_ll.setOnClickListener(this);
522 | pause_all_ll.setOnClickListener(this);
523 | }
524 |
525 | @Override
526 | public void onClick(View v) {
527 | switch (v.getId()) {
528 | case R.id.download_back:
529 | finish();
530 | break;
531 | case R.id.citylist_top_tv1:// 城市列表
532 | citylist_ll.setVisibility(View.VISIBLE);
533 | localmap_layout.setVisibility(View.GONE);
534 | description_ll.setVisibility(View.GONE);
535 | // isdownloadpressed = false;
536 | cityExpandAdapter.notifyDataSetChanged();
537 | citylist_top_tv1.setBackgroundResource(R.drawable.citylist_press);
538 | citylist_top_tv2.setBackgroundResource(R.drawable.download_normal);
539 | citylist_top_tv1.setTextColor(getResources().getColor(
540 | R.color.text_new_tag));
541 | citylist_top_tv2.setTextColor(getResources().getColor(R.color.blue));
542 |
543 |
544 | break;
545 | case R.id.citylist_top_tv2:// 下载管理
546 | // isdownloadpressed = true;
547 | switchToDownLoad();
548 | break;
549 | case R.id.download_all_ll:// 全部下载点击事件
550 | startDownLoadAllCitys();
551 | break;
552 | case R.id.delete_all_ll:// 全部删除点击事件
553 | deleteOfflineMapDialog(-1);
554 | break;
555 | case R.id.pause_all_ll:// 全部暂停点击事件
556 | pauseAllUnDownLoadCity();
557 | break;
558 | default:
559 | break;
560 | }
561 |
562 | }
563 |
564 | /**
565 | * 切换到下载管理界面
566 | */
567 |
568 | private void switchToDownLoad() {
569 | citylist_top_tv1.setBackgroundResource(R.drawable.citylist_normal);
570 | citylist_top_tv2.setBackgroundResource(R.drawable.download_press);
571 | citylist_top_tv1.setTextColor(getResources().getColor(R.color.blue));
572 | citylist_top_tv2.setTextColor(getResources().getColor(
573 | R.color.text_new_tag));
574 | updateView();
575 | if (downloadedMaps.isEmpty()) {
576 | description_ll.setVisibility(View.VISIBLE);
577 | citylist_ll.setVisibility(View.GONE);
578 | localmap_layout.setVisibility(View.GONE);
579 | } else {
580 | localmap_layout.setVisibility(View.VISIBLE);
581 | citylist_ll.setVisibility(View.GONE);
582 | description_ll.setVisibility(View.GONE);
583 | }
584 | initBottomButtonBg();
585 |
586 | }
587 |
588 |
589 | @Override
590 | public void onGetOfflineMapState(int type, int state) {
591 |
592 | switch (type) {
593 | case MKOfflineMap.TYPE_DOWNLOAD_UPDATE: {
594 | MKOLUpdateElement update = mOffline.getUpdateInfo(state);
595 | // 处理下载进度更新提示
596 | if (update != null) {
597 | updateView();
598 | cityExpandAdapter.notifyDataSetChanged();
599 | }
600 | }
601 | break;
602 | case MKOfflineMap.TYPE_NEW_OFFLINE:
603 | // 有新离线地图安装
604 | Log.d("OfflineDemo", String.format("add offlinemap num:%d", state));
605 | break;
606 | case MKOfflineMap.TYPE_VER_UPDATE:
607 | // 版本更新提示
608 | // MKOLUpdateElement e = mOffline.getUpdateInfo(state);
609 |
610 | break;
611 | default:
612 | break;
613 | }
614 |
615 | }
616 |
617 | /**
618 | * 下载完成后更新底部UI
619 | */
620 | @Override
621 | public void updateFinished() {
622 | initBottomButtonBg();
623 | }
624 |
625 |
626 | @Override
627 | public void networkRecovery() {
628 | startDownLoadAllCitys();
629 | }
630 |
631 | @Override
632 | public void networkShutDown() {
633 | pauseAllUnDownLoadCity();
634 | }
635 | }
636 |
--------------------------------------------------------------------------------
/app/src/main/java/com/downofflinemap/MyApplication.java:
--------------------------------------------------------------------------------
1 | package com.downofflinemap;
2 |
3 | import android.app.Application;
4 |
5 | import com.baidu.mapapi.SDKInitializer;
6 |
7 | /**
8 | * Author:wang_sir
9 | * Time:2018/5/31 15:58
10 | * Description:This is MyApplication
11 | */
12 | public class MyApplication extends Application {
13 | @Override
14 | public void onCreate() {
15 | super.onCreate();
16 | // 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
17 | SDKInitializer.initialize(this);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/downofflinemap/adapter/CityExpandableAdapter.java:
--------------------------------------------------------------------------------
1 | package com.downofflinemap.adapter;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.BaseExpandableListAdapter;
8 | import android.widget.ImageView;
9 | import android.widget.TextView;
10 |
11 | import com.baidu.mapapi.map.offline.MKOLSearchRecord;
12 | import com.baidu.mapapi.map.offline.MKOLUpdateElement;
13 | import com.baidu.mapapi.map.offline.MKOfflineMap;
14 | import com.downofflinemap.R;
15 |
16 | import java.util.ArrayList;
17 | import java.util.List;
18 |
19 |
20 | public class CityExpandableAdapter extends BaseExpandableListAdapter {
21 |
22 | private Context context;
23 | private ArrayList group;
24 | private ArrayList> child;
25 | private ViewHolder viewHolder;
26 | private MKOfflineMap mOffline;
27 |
28 | public CityExpandableAdapter(Context context,
29 | ArrayList group,
30 | ArrayList> child, MKOfflineMap mOffline) {
31 |
32 | this.context = context;
33 | this.group = group;
34 | this.child = child;
35 | this.mOffline =mOffline;
36 |
37 | }
38 | @Override
39 | public int getChildrenCount(int arg0) {
40 | return child.get(arg0).size();
41 | }
42 |
43 | @Override
44 | public Object getChild(int groupPosition, int childId) {
45 | return child.get(groupPosition).get(childId);
46 | }
47 |
48 | @Override
49 | public long getChildId(int groupId, int childId) {
50 | return childId;
51 | }
52 |
53 | @Override
54 | public View getChildView(int groupPosition, int childPosition,
55 | boolean arg2, View view, ViewGroup arg4) {
56 | if (view == null) {
57 | viewHolder = new ViewHolder();
58 | view = LayoutInflater.from(context).inflate(R.layout.citys_item,
59 | null);
60 | viewHolder.city_name_tv = (TextView) view
61 | .findViewById(R.id.city_name_tv);
62 | viewHolder.isdownload_tv = (TextView) view
63 | .findViewById(R.id.isdownload_tv);
64 | viewHolder.city_size_tv = (TextView) view
65 | .findViewById(R.id.city_size_tv);
66 | viewHolder.isdownload_iv = (ImageView) view
67 | .findViewById(R.id.isdownload_iv);
68 | view.setTag(viewHolder);
69 | } else {
70 | viewHolder = (ViewHolder) view.getTag();
71 | }
72 | MKOLSearchRecord bean_group = group.get(groupPosition);
73 | List arrays_child = child.get(groupPosition);
74 | MKOLSearchRecord bean = arrays_child.get(childPosition);
75 |
76 | int cityId = bean.cityID;
77 | MKOLUpdateElement update = mOffline.getUpdateInfo(cityId);
78 | if(update!=null){
79 | if(update.status==1){
80 | viewHolder.isdownload_tv.setText("(正在下载)");
81 | viewHolder.isdownload_tv.setTextColor(context.getResources().getColor(R.color.red));
82 | }else if(update.status==2){
83 | viewHolder.isdownload_tv.setText("(等待下载)");
84 | viewHolder.isdownload_tv.setTextColor(context.getResources().getColor(R.color.red));
85 | }else if(update.status==3){
86 | viewHolder.isdownload_tv.setText("(已暂停)");
87 | viewHolder.isdownload_tv.setTextColor(context.getResources().getColor(R.color.red));
88 | }else if(update.status==4 ||update.status==10 ){
89 | viewHolder.isdownload_tv.setText("(已下载)");
90 | viewHolder.isdownload_tv.setTextColor(context.getResources().getColor(R.color.black));
91 | }
92 | viewHolder.isdownload_iv.setBackgroundResource(R.drawable.download_disable_grey);
93 |
94 | }else{
95 | viewHolder.isdownload_tv.setText("");
96 | viewHolder.isdownload_iv.setBackgroundResource(R.drawable.download_able_hight);
97 | }
98 |
99 |
100 |
101 | if (childPosition == 0) {
102 | viewHolder.city_name_tv.setText("所有城市");
103 | if(getisDownload(bean_group).size()==arrays_child.size()-1){
104 | viewHolder.isdownload_tv.setText("(已下载)");
105 | viewHolder.isdownload_iv.setBackgroundResource(R.drawable.download_disable_grey);
106 | }
107 | } else {
108 | viewHolder.city_name_tv.setText(bean.cityName);
109 |
110 | }
111 |
112 |
113 | viewHolder.city_size_tv.setText("");
114 | viewHolder.city_name_tv.setPadding(40, 0, 0, 0);
115 | viewHolder.city_name_tv.setTextSize(15);
116 | viewHolder.city_size_tv.setTextSize(12);
117 | viewHolder.isdownload_tv.setTextSize(12);
118 | return view;
119 | }
120 |
121 |
122 | @Override
123 | public Object getGroup(int groupId) {
124 | return group.get(groupId);
125 | }
126 |
127 | @Override
128 | public int getGroupCount() {
129 | return group.size();
130 | }
131 |
132 | @Override
133 | public long getGroupId(int groupId) {
134 | return groupId;
135 | }
136 |
137 | @Override
138 | public View getGroupView(int arg0, boolean arg1, View view, ViewGroup arg3) {
139 | if (view == null) {
140 | viewHolder = new ViewHolder();
141 | view = LayoutInflater.from(context).inflate(R.layout.citys_item,
142 | null);
143 | viewHolder.city_name_tv = (TextView) view
144 | .findViewById(R.id.city_name_tv);
145 | viewHolder.isdownload_tv = (TextView) view
146 | .findViewById(R.id.isdownload_tv);
147 | viewHolder.city_size_tv = (TextView) view
148 | .findViewById(R.id.city_size_tv);
149 | viewHolder.isdownload_iv = (ImageView) view
150 | .findViewById(R.id.isdownload_iv);
151 | view.setTag(viewHolder);
152 | } else {
153 | viewHolder = (ViewHolder) view.getTag();
154 |
155 | }
156 | MKOLSearchRecord bean = group.get(arg0);
157 |
158 | int cityId = bean.cityID;
159 | MKOLUpdateElement update = mOffline.getUpdateInfo(cityId);
160 | if(update!=null){
161 | if(update.status==1){
162 | viewHolder.isdownload_tv.setText("(正在下载)");
163 | viewHolder.isdownload_tv.setTextColor(context.getResources().getColor(R.color.red));
164 | }else if(update.status==2){
165 | viewHolder.isdownload_tv.setText("(等待下载)");
166 | viewHolder.isdownload_tv.setTextColor(context.getResources().getColor(R.color.red));
167 | }else if(update.status==3){
168 | viewHolder.isdownload_tv.setText("(已暂停)");
169 | viewHolder.isdownload_tv.setTextColor(context.getResources().getColor(R.color.red));
170 | }else if(update.status==4 ||update.status==10 ){
171 | viewHolder.isdownload_tv.setText("(已下载)");
172 | viewHolder.isdownload_tv.setTextColor(context.getResources().getColor(R.color.black));
173 | }
174 | viewHolder.isdownload_iv.setBackgroundResource(R.drawable.download_disable_grey);
175 | }else{
176 | viewHolder.isdownload_tv.setText("");
177 | viewHolder.isdownload_iv.setBackgroundResource(R.drawable.download_able_hight);
178 | }
179 |
180 | viewHolder.city_name_tv.setText(bean.cityName);
181 | if (bean.childCities == null) {
182 | viewHolder.city_size_tv.setText("");
183 | viewHolder.city_size_tv.setTextSize(13);
184 |
185 | } else {
186 |
187 | if(getisDownload(bean).size()==bean.childCities.size()){
188 | viewHolder.isdownload_tv.setText("(已下载)");
189 | }
190 |
191 |
192 | viewHolder.city_size_tv.setText("");
193 | viewHolder.isdownload_iv.setBackgroundResource(R.drawable.icon_down);
194 | }
195 | return view;
196 | }
197 |
198 | @Override
199 | public boolean hasStableIds() {
200 | return true;
201 | }
202 |
203 | @Override
204 | public boolean isChildSelectable(int arg0, int arg1) {
205 | return true;
206 | }
207 |
208 | class ViewHolder {
209 | private TextView city_name_tv;
210 | private TextView isdownload_tv;
211 | private TextView city_size_tv;
212 | private ImageView isdownload_iv;
213 |
214 | }
215 | public ArrayList getisDownload(MKOLSearchRecord bean){
216 | ArrayList arrays = new ArrayList();
217 | for(MKOLSearchRecord record:bean.childCities){
218 |
219 | int cityid = record.cityID;
220 | MKOLUpdateElement element = mOffline.getUpdateInfo(cityid);
221 |
222 | if(element!=null){
223 | if(element.status==4||element.status==10){
224 | arrays.add(cityid);
225 | }
226 | }
227 |
228 | }
229 | return arrays;
230 | }
231 |
232 |
233 |
234 | }
235 |
--------------------------------------------------------------------------------
/app/src/main/java/com/downofflinemap/adapter/DownloadedMapsAdapter.java:
--------------------------------------------------------------------------------
1 | package com.downofflinemap.adapter;
2 |
3 | /**
4 | * Author:wang_sir
5 | * Time:2018/6/1 11:33
6 | * Description:This is DownloadedMapsAdapter
7 | */
8 |
9 | import android.content.Context;
10 | import android.view.LayoutInflater;
11 | import android.view.View;
12 | import android.view.ViewGroup;
13 | import android.widget.BaseAdapter;
14 | import android.widget.TextView;
15 |
16 | import com.baidu.mapapi.map.offline.MKOLUpdateElement;
17 | import com.downofflinemap.R;
18 | import com.downofflinemap.interfaces.UpdateFinishedCallBack;
19 |
20 | import java.util.ArrayList;
21 |
22 | /**
23 | * 离线地图管理列表适配器
24 | */
25 | public class DownloadedMapsAdapter extends BaseAdapter {
26 | private ArrayList downloadedMaps;
27 | private UpdateFinishedCallBack updateFinishedCallBack;
28 | private Context context;
29 |
30 | public DownloadedMapsAdapter(Context context, ArrayList downloadedMaps, UpdateFinishedCallBack updateFinishedCallBack) {
31 | this.downloadedMaps = downloadedMaps;
32 | this.updateFinishedCallBack = updateFinishedCallBack;
33 | this.context = context;
34 | }
35 |
36 | public void notify(ArrayList downloadedMaps){
37 | this.downloadedMaps = downloadedMaps;
38 | notifyDataSetChanged();
39 | }
40 |
41 | @Override
42 | public int getCount() {
43 | return downloadedMaps == null ? 0 : downloadedMaps.size();
44 | }
45 |
46 | @Override
47 | public Object getItem(int index) {
48 | return downloadedMaps.get(index);
49 | }
50 |
51 | @Override
52 | public long getItemId(int index) {
53 | return index;
54 | }
55 |
56 | @Override
57 | public View getView(int index, View view, ViewGroup arg2) {
58 | ViewHolder holder = null;
59 | if (view == null) {
60 | view = LayoutInflater.from(context).inflate(
61 | R.layout.download_item, null);
62 | holder = new ViewHolder();
63 | holder.cityname_tv = (TextView) view
64 | .findViewById(R.id.cityname_tv);
65 | holder.citysize_tv = (TextView) view
66 | .findViewById(R.id.citysize_tv);
67 | holder.cityprogress_tv = (TextView) view
68 | .findViewById(R.id.cityprogress_tv);
69 | holder.citydelete_tv = (TextView) view
70 | .findViewById(R.id.citydelete_tv);
71 | view.setTag(holder);
72 | } else {
73 | holder = (ViewHolder) view.getTag();
74 | }
75 | MKOLUpdateElement e = downloadedMaps.get(index);
76 |
77 | initViewItem(holder, e);
78 | return view;
79 | }
80 |
81 | public void initViewItem(ViewHolder holder, final MKOLUpdateElement e) {
82 |
83 | holder.cityprogress_tv.setText(e.ratio + "%");
84 | holder.cityname_tv.setText(e.cityName);
85 | holder.citysize_tv.setText(formatDataSize(e.size));
86 | if (e.status == 1) {// 正在下载
87 | holder.citydelete_tv.setText("暂停下载");
88 | } else if (e.status == 2) {// 等待下载
89 | holder.citydelete_tv.setText("等待下载");
90 | } else if (e.status == 3||e.status == 8) {// 已暂停
91 | holder.citydelete_tv.setText("已暂停");
92 | } else if (e.status == 4 || e.status == 10) {// 下载完成
93 | holder.citydelete_tv.setText("已完成");
94 | holder.cityprogress_tv.setText("");
95 |
96 | if (updateFinishedCallBack != null) {
97 | updateFinishedCallBack.updateFinished();
98 | }
99 |
100 | }
101 | }
102 |
103 | class ViewHolder {
104 |
105 | private TextView cityname_tv;
106 | private TextView citysize_tv;
107 | private TextView cityprogress_tv;
108 | private TextView citydelete_tv;
109 |
110 | public ViewHolder() {
111 |
112 | }
113 |
114 |
115 | }
116 | public String formatDataSize(int size) {
117 | String ret = "";
118 | if (size < (1024 * 1024)) {
119 | ret = String.format("%dK", size / 1024);
120 | } else {
121 | ret = String.format("%.1fM", size / (1024 * 1024.0));
122 | }
123 | return ret;
124 | }
125 | }
126 |
127 |
--------------------------------------------------------------------------------
/app/src/main/java/com/downofflinemap/broadcastReceiver/ConnectionChangeReceiver.java:
--------------------------------------------------------------------------------
1 | package com.downofflinemap.broadcastReceiver;
2 |
3 | /**
4 | * Author:wang_sir
5 | * Time:2018/6/1 13:58
6 | * Description:This is ConnectionChangeReceiver
7 | */
8 |
9 | import android.content.BroadcastReceiver;
10 | import android.content.Context;
11 | import android.content.Intent;
12 | import android.net.ConnectivityManager;
13 | import android.net.NetworkInfo;
14 |
15 | import com.downofflinemap.interfaces.NetStatusCallBack;
16 |
17 | /**
18 | * 监听网络状态广播
19 | */
20 | public class ConnectionChangeReceiver extends BroadcastReceiver {
21 |
22 | private NetStatusCallBack netStatusCallBack;
23 |
24 | public ConnectionChangeReceiver(NetStatusCallBack netStatusCallBack) {
25 | this.netStatusCallBack = netStatusCallBack;
26 | }
27 |
28 | @Override
29 | public void onReceive(Context context, Intent intent) {
30 | ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
31 | NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
32 | NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
33 |
34 | if (!wifiNetInfo.isConnected()) {//网络断开时,将所有任务暂停
35 | if (netStatusCallBack != null) {
36 | netStatusCallBack.networkShutDown();
37 | }
38 |
39 | } else {//网络恢复后,开始所有未完成任务
40 | if (netStatusCallBack != null) {
41 | netStatusCallBack.networkRecovery();
42 | }
43 |
44 | }
45 | }
46 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/downofflinemap/interfaces/NetStatusCallBack.java:
--------------------------------------------------------------------------------
1 | package com.downofflinemap.interfaces;
2 |
3 | /**
4 | * Author:wang_sir
5 | * Time:2018/6/1 13:59
6 | * Description:This is NetStatusCallBack
7 | */
8 | public interface NetStatusCallBack {
9 |
10 | void networkRecovery();//网络状态恢复
11 | void networkShutDown();//网络断开
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/downofflinemap/interfaces/UpdateFinishedCallBack.java:
--------------------------------------------------------------------------------
1 | package com.downofflinemap.interfaces;
2 |
3 | /**
4 | * Author:wang_sir
5 | * Time:2018/6/1 11:43
6 | * Description:This is UpdateFinishedCallBack 更新结束后的回调
7 | */
8 | public interface UpdateFinishedCallBack {
9 |
10 | void updateFinished();
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/back_n.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/back_n.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/back_n_press.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/back_n_press.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/citylist_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/citylist_press.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/delete_all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/delete_all.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/delete_all_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/delete_all_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/delete_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_able_hight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/download_able_hight.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_all_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_all_bg_grey.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_back_selecter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_disable_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/download_disable_grey.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/download_grey.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_hight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/download_hight.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_press.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/downloadiv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/downloadiv.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
15 |
20 |
25 |
30 |
35 |
40 |
45 |
50 |
55 |
60 |
65 |
70 |
75 |
80 |
85 |
90 |
95 |
100 |
105 |
110 |
115 |
120 |
125 |
130 |
135 |
140 |
145 |
150 |
155 |
160 |
165 |
170 |
171 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/icon_down.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/pause_all_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/pause_all_press.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/pause_grey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/pause_grey.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/pause_hight.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/pause_hight.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/search_clear_normal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/search_clear_normal.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/search_clear_pressed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/drawable/search_clear_pressed.png
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/back_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
21 |
22 |
23 |
24 |
28 |
29 |
42 |
43 |
44 |
45 |
52 |
53 |
54 |
55 |
68 |
69 |
73 |
74 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/citys_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
18 |
19 |
26 |
27 |
35 |
36 |
37 |
43 |
44 |
51 |
52 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/download_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
19 |
20 |
27 |
28 |
35 |
36 |
37 |
43 |
44 |
51 |
52 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/downloadoffpage.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
14 |
15 |
24 |
25 |
30 |
31 |
42 |
43 |
54 |
55 |
56 |
57 |
61 |
62 |
69 |
70 |
79 |
80 |
87 |
88 |
89 |
90 |
96 |
97 |
104 |
105 |
112 |
113 |
114 |
121 |
122 |
129 |
130 |
131 |
136 |
137 |
148 |
149 |
158 |
159 |
169 |
170 |
178 |
179 |
185 |
186 |
194 |
195 |
196 |
200 |
201 |
209 |
210 |
217 |
218 |
226 |
227 |
228 |
232 |
233 |
241 |
242 |
249 |
250 |
258 |
259 |
260 |
261 |
262 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 | #3366cc
7 | #cc0000
8 | #000000
9 | #ffffff
10 | #AEC8FF
11 | #518CDD
12 | #ffffff
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | DownOffLineMap
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/test/java/com/downofflinemap/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.downofflinemap;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() throws Exception {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 |
5 | repositories {
6 | google()
7 | jcenter()
8 | }
9 | dependencies {
10 | classpath 'com.android.tools.build:gradle:3.0.1'
11 |
12 |
13 | // NOTE: Do not place your application dependencies here; they belong
14 | // in the individual module build.gradle files
15 | }
16 | }
17 |
18 | allprojects {
19 | repositories {
20 | google()
21 | jcenter()
22 | }
23 | }
24 |
25 | task clean(type: Delete) {
26 | delete rootProject.buildDir
27 | }
28 |
--------------------------------------------------------------------------------
/display/ceshi.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/display/ceshi.gif
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | org.gradle.jvmargs=-Xmx1536m
13 |
14 | # When configured, Gradle will run in incubating parallel mode.
15 | # This option should only be used with decoupled projects. More details, visit
16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
17 | # org.gradle.parallel=true
18 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DevelopWb/BaiduMapOffLine/6b97066675d6f0dfa8d574a143f2804a4d3ce34c/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 01 09:57:25 CST 2018
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
7 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------