1.此问题为概率问题;
2.复现从日志发现,平台在系统未起来前发送U盘挂载广播时出现异常,广播未能正常发出;
3.目前采取规避方案:
系统起来后,盒子挂载上的广播平台每次都会发送挂载成功的广播出来,所以在收到此广播后,检测/proc/mounts文件,检查U盘是否已经挂载上,如果挂载上检测是否有升级版本进行升级。
/**
* 避免系统挂载广播无法发出
*/
private Thread mCheckThread= new Thread(){
@Override
public void run() {
super.run();
BufferedReader br = null;
try {
Thread.sleep(8500);
br = new BufferedReader(new FileReader("/proc/mounts"));
String line = br.readLine();
int start = 0, end = 0;
// 遍成所有符合条件的分区
while (line != null) {
start = line.indexOf("/mnt/sda/");
if (start>0) {
end = line.indexOf(" ", start);
String tmpPath = line.substring(start, end);
if (tmpPath.trim().length() > 9) { // 最起码得比/mnt/sda/这个字符串长
log.d("usbupgrade:mountPath=" + tmpPath);
Intent serviceIntent = new Intent(mContext, SWUsbUpgradeService.class);
serviceIntent.putExtra("path", tmpPath);
mContext.startService(serviceIntent);
}
}
line = br.readLine();
}
br.close();
br = null;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
} catch (Exception e) {
}
}
}
};