Andrid Tv開發中下載第三方應用,解析包失敗。
阿新 • • 發佈:2018-11-23
前提條件是,電視機沒有外接SD卡。這時候下載應用 要儲存在內建的空間裡。可以寫入進入卻無法,開啟。開啟報解析包出現問題。
最後的解決方法是:內建空間沒有許可權讀取。
Android4.4
//當你下載完成後,並儲存在指定的路徑。這個路徑可以寫入,卻無法讀取 //先給許可權 setUpdateDir(new File(getApplicationContext().getDir("app", MODE_WORLD_WRITEABLE) + "/" + "SPA")); //再安裝 installApp(getApplicationContext().getDir("app", MODE_WORLD_WRITEABLE) + "/" + "SPA"); /** * 內建儲存中給指定的檔案許可權。 * * @param updateDir 檔案路徑位置 */ private void setUpdateDir(File updateDir) { try { Process p = Runtime.getRuntime().exec("chmod 777 " + updateDir); int status = p.waitFor(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //根據指定路徑安裝APP private void installApp(String path) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setDataAndType(Uri.parse("file://" + path), "application/vnd.android.package-archive"); startActivity(intent); }
例子:
使用okgo下載
/** * 下載第三方 * @param url APP路徑 * @param */ public void downLoadApp(String url) { OkGo.<File>get(url) .tag(this) .execute(new FileCallback(getApplicationContext().getDir("app", MODE_WORLD_WRITEABLE)+"/", "dsf") { @Override public void onStart(Request<File, ? extends Request> request) { super.onStart(request); showDialog(getResources().getString(R.string.loading_string)); } @Override public void onSuccess(Response<File> response) {//sdcard/download/ 預設下載路徑 setUpdateDir(new File(getApplicationContext().getDir("app", MODE_WORLD_WRITEABLE) + "/" +"dsf"));//先給許可權 //再安裝 installApp(getApplicationContext().getDir("app", MODE_WORLD_WRITEABLE) + "/" + "dsf" ); hud.dismiss(); // startActivity(intent);//下載完後 啟動應用。 } @Override public void downloadProgress(Progress progress) { super.downloadProgress(progress); // dialog.setPRo((int) progress.fraction); } @Override public void onFinish() { super.onFinish(); } }); }