我想要實現自動更新之後馬上自動安裝,它是本地的所以它不是在應用市場裡的。
這是我的代碼
public void Update(String apkurl){
try {
URL url= new URL(apkurl);
HttpURLConnection c= (HttpURLConnection) url.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
String PATH= Environment.getExternalStorageDirectory() + "/download/";
File file= new File(PATH);
file.mkdirs();
File outputFile= new File(file, "app.apk");
FileOutputStream fos= new FileOutputStream(outputFile);
InputStream is = c.getInputStream();
byte[] buffer= new byte[1024];
int len1= 0;
while ((len1= is.read(buffer)) != -1) { fos.write(buffer, 0, len1);
}
fos.close();
is.close();
Intent promptInstall= new Intent(Intent.ACTION_VIEW)
.setData(Uri.parse(PATH+"app.apk"))
.setType("application/android.com.app");
startActivity(promptInstall);
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Update error!", Toast.LENGTH_LONG).show();
}
}
我的權限是INTERNET, WRITE_EXTERNAL_STORAGE, INSTALL_PACKAGES, DELETE_PACKAGES
當網絡提示安裝加載的時候,引用程序就無法繼續運行
所以,是我缺少什麼權限還是我的代碼不正確,或者有更好的方法來實現嗎?
我已經解決了這個問題了,在setdata和settype中有錯誤
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/" + "app.apk")), "application/vnd.android.package-archive");
startActivity(intent);
現在正確了,我的自動更新也可以了。