├── .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 | 16 | 26 | 27 | 28 | 29 | 30 | 31 | 33 | 34 | 35 | 36 | 37 | 1.8 38 | 39 | 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 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BaiduMapOffLine 2 | 高仿百度地图离线地图下载 3 | 4 | ### 效果图 5 | ![](/display/ceshi.gif) 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 | --------------------------------------------------------------------------------