本人在开发电视端的app的过程中,发现安卓自动下载更新的过程中,出现了相当一部分电视机不存在sd卡软件缓存无法下载apk文件的问题,在查看了当贝应用市场的下载源码之后,扣出了没有sd卡的情况下File的创建代码,测试可用。调用代码a("",context)返回File文件即可,第一个参数不需要传值。第二个传输上下文。
public File a(String var1, Context var2) { String a = ""; String b = "/DBDownload"; String var3 = Environment.getExternalStorageState(); boolean var4 = !TextUtils.isEmpty(var3) && var3.equals("mounted"); // String var5 = Environment.getExternalStorageDirectory().toString().trim() + File.separator + b; // boolean var6 = com.dangbei.downloader.b.a.c(var5); // if(var4) { // if(var6 && this.e() > 200L) { // a = var5 + File.separator; // } else { // a = var2.getCacheDir().toString() + File.separator; // } // } else { a = var2.getCacheDir().toString() + File.separator; // } File var7 = new File(a); if(!var7.exists()) { var7.mkdirs(); } this.b(var7.getPath()); // String var8 = com.dangbei.downloader.b.a.a(var1); File var9 = new File(a, ".apk"); try { if(!var9.exists()) { var9.createNewFile(); } this.b(var9.getPath()); } catch (Exception var11) { var11.printStackTrace(); } return var9; } public long e() { try { File var1 = Environment.getExternalStorageDirectory(); StatFs var2 = new StatFs(var1.getPath()); long var3 = (long)var2.getBlockSize(); long var5 = (long)var2.getAvailableBlocks(); return var5 * var3 / 1024L / 1024L; } catch (Exception var7) { var7.printStackTrace(); return 0L; } } public void b(String var1) { try { String var2 = "chmod 777 " + var1; Runtime var3 = Runtime.getRuntime(); var3.exec(var2); } catch (IOException var4) { var4.printStackTrace(); } }