@@ -120,11 +120,11 @@ public class UpdateService extends Service {
120
120
121
121
/**
122
122
* 本地升级配置文件名
123
- *
123
+ * <p>
124
124
* 在u盘{@link #LOCAL_UPDATE_PATH}路径下创建此配置文件,内容如下:
125
- *
126
- * #升级类型,1:推荐升级,2:静默升级
127
- * UPDATE_TYPE=2
125
+ * <p>
126
+ * #升级类型,1:推荐升级,2:静默升级
127
+ * UPDATE_TYPE=2
128
128
*/
129
129
public static final String USB_CONFIG_FILENAME = "config.ini" ;
130
130
@@ -141,6 +141,29 @@ public class UpdateService extends Service {
141
141
public static final String DATA_ROOT = "/data/media/0" ;
142
142
public static final String FLASH_ROOT = Environment .getExternalStorageDirectory ().getAbsolutePath ();
143
143
144
+ /**
145
+ * 本地升级包检查内部路径(sdcard),只检查根目录
146
+ * 例:/data/media/0/{@link LOCAL_UPDATE_PATH}
147
+ * <p>
148
+ * 不能使用AppUtils.getStorageList()获取的路径,否则在Recovery中无法找到文件
149
+ */
150
+ private static final String [] INTERNAL_DIRS = {
151
+ DATA_ROOT ,
152
+ FLASH_ROOT ,
153
+ "/mnt/external_sd"
154
+ };
155
+
156
+ /**
157
+ * 本地升级包检查外部路径(usb),检查二级子目录
158
+ * 例:/mnt/media_rw/6ABF-0AD3/{@link LOCAL_UPDATE_PATH}
159
+ * <p>
160
+ * 不能使用AppUtils.getStorageList()获取的路径,否则在Recovery中无法找到文件
161
+ */
162
+ private static final String [] EXTERNAL_DIRS = {
163
+ "/mnt/usb_storage" ,
164
+ "/mnt/media_rw"
165
+ };
166
+
144
167
/**
145
168
* 保存系统升级状态文件
146
169
*/
@@ -168,6 +191,7 @@ public class UpdateService extends Service {
168
191
private DownloadAdapter mDownloadAdapter ;
169
192
170
193
private int mLocalPackageIndex = 0 ;
194
+ private int mLocalUpdateType = UPDATE_TYPE_RECOMMEND ;
171
195
private List <LocalPackage > mLocalPackages = new ArrayList <>();
172
196
173
197
private HashMap <String , InstallProgress > mInstallProgresses = new HashMap <>();
@@ -403,58 +427,90 @@ private void parseBaiduNewVersion(String jsonList) {
403
427
* 应用升级包:exupdate 目录下的apk文件
404
428
*/
405
429
private void checkLocalUpdate () {
430
+ mLocalUpdateType = UPDATE_TYPE_RECOMMEND ;
406
431
mLocalPackageIndex = 0 ;
407
432
mLocalPackages .clear ();
408
433
409
- List <String > searchPaths = AppUtils .getStorageList (this );
410
- for (String dirPath : searchPaths ) {
411
- Log .i (TAG , "checkLocalUpdate, search: " + dirPath );
412
-
413
- int updateType = UPDATE_TYPE_RECOMMEND ;
414
- File dir = new File (dirPath );
415
- for (File file : dir .listFiles ()) {
416
-
417
- if (file .isDirectory ()) {
418
- if (TextUtils .equals (file .getName (), LOCAL_UPDATE_PATH )) {
419
- File [] files = file .listFiles (new FileFilter () {
420
- @ Override
421
- public boolean accept (File tmpFile ) {
422
- return (!tmpFile .isDirectory () && TextUtils .equals (
423
- FileUtils .getFileSuffix (tmpFile .getName ()), "apk" ));
424
- }
425
- });
426
-
427
- for (File apkFile : files ) {
428
- mLocalPackages .add (new LocalPackage (LocalPackage .TYPE_APP , apkFile ));
429
- }
434
+ for (String root : EXTERNAL_DIRS ) {
435
+ Log .i (TAG , "checkLocalUpdate, search external: " + root );
430
436
431
- File configFile = new File (file , USB_CONFIG_FILENAME );
432
- if (configFile .exists ()) {
433
- updateType = new UsbConfigManager (configFile ).getUpdateType ();
434
- }
437
+ File rootDir = new File (root );
438
+ if (null != rootDir .listFiles ()) {
439
+ for (File file : rootDir .listFiles ()) {
440
+ if (file .isDirectory ()) {
441
+ loadExupdate (new File (file , LOCAL_UPDATE_PATH ));
442
+ loadOtaPackage (file );
435
443
436
- File otaFile = new File (file , ROM_OTA_PACKAGE_FILENAME );
437
- if (otaFile .exists ()) {
438
- mLocalPackages .add (new LocalPackage (LocalPackage .TYPE_ROM , otaFile ));
444
+ if (!mLocalPackages .isEmpty ()) {
445
+ break ;
439
446
}
440
447
}
441
448
}
442
449
}
450
+ }
451
+
452
+ if (mLocalPackages .isEmpty ()) {
453
+ for (String root : INTERNAL_DIRS ) {
454
+ Log .i (TAG , "checkLocalUpdate, search internal: " + root );
455
+
456
+ File rootDir = new File (root );
457
+ loadExupdate (new File (rootDir , LOCAL_UPDATE_PATH ));
458
+ loadOtaPackage (rootDir );
459
+
460
+ if (!mLocalPackages .isEmpty ()) {
461
+ break ;
462
+ }
463
+ }
464
+ }
465
+
466
+ if (!mLocalPackages .isEmpty ()) {
467
+ for (LocalPackage localPackage : mLocalPackages ) {
468
+ Log .i (TAG , "checkLocalUpdate, found: " + localPackage .toString ());
469
+ }
470
+
471
+ sWorkHandleLocked = true ;
472
+ if (UPDATE_TYPE_SILENT == mLocalUpdateType ) {
473
+ installLocalNext ();
474
+ } else {
475
+ showNewVersion ();
476
+ }
477
+ }
478
+ }
443
479
444
- if (!mLocalPackages .isEmpty ()) {
445
- for (LocalPackage localPackage : mLocalPackages ) {
446
- Log .i (TAG , "checkLocalUpdate, found: " + localPackage .toString ());
480
+ private boolean loadOtaPackage (File file ) {
481
+ if (null != file && file .exists () && file .isDirectory ()) {
482
+ File otaFile = new File (file , ROM_OTA_PACKAGE_FILENAME );
483
+ if (otaFile .exists ()) {
484
+ mLocalPackages .add (new LocalPackage (LocalPackage .TYPE_ROM , otaFile ));
485
+ }
486
+ }
487
+
488
+ return !mLocalPackages .isEmpty ();
489
+ }
490
+
491
+ private boolean loadExupdate (File file ) {
492
+ if (null != file && file .exists () && file .isDirectory ()) {
493
+ File [] files = file .listFiles (new FileFilter () {
494
+ @ Override
495
+ public boolean accept (File tmpFile ) {
496
+ return (!tmpFile .isDirectory () && TextUtils .equals (
497
+ FileUtils .getFileSuffix (tmpFile .getName ()), "apk" ));
447
498
}
499
+ });
448
500
449
- sWorkHandleLocked = true ;
450
- if (UPDATE_TYPE_SILENT == updateType ) {
451
- installLocalNext ();
452
- } else {
453
- showNewVersion ();
501
+ if (null != files ) {
502
+ for (File apkFile : files ) {
503
+ mLocalPackages .add (new LocalPackage (LocalPackage .TYPE_APP , apkFile ));
454
504
}
455
- break ;
505
+ }
506
+
507
+ File configFile = new File (file , USB_CONFIG_FILENAME );
508
+ if (configFile .exists ()) {
509
+ mLocalUpdateType = new UsbConfigManager (configFile ).getUpdateType ();
456
510
}
457
511
}
512
+
513
+ return !mLocalPackages .isEmpty ();
458
514
}
459
515
460
516
/**
0 commit comments