android下載apk並安裝
阿新 • • 發佈:2020-08-03
1、設定許可權
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET"/>
2、業務程式碼
package com.example.esri.app04.network; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; import android.os.SystemClock; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URI; import java.net.URL; public class MainActivity extends AppCompatActivity { private File apkFile; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void downloadAPK(View v){ final ProgressDialog dialog = new ProgressDialog(this); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.show(); //準備用於儲存apk檔案的file物件 放在sd卡里面 apkFile = new File(getExternalFilesDir(null), "update.apk"); //啟動分執行緒下載資料,顯示下載進度 new Thread(new Runnable() { @Override public void run() { try{ //1 得到連結物件 String path = "http://192.168.0.184:8080/storage.apk"; URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(5000); connection.setReadTimeout(10000); connection.connect(); int responseCode = connection.getResponseCode(); if(responseCode == 200){ //設定dialog最大進度 dialog.setMax(connection.getContentLength()); InputStream is = connection.getInputStream(); FileOutputStream fos = new FileOutputStream(apkFile); byte[] buffer = new byte[1024]; int len = -1; while ((len = is.read(buffer)) != -1){ fos.write(buffer, 0, len); dialog.incrementProgressBy(len); } fos.close(); is.close(); } connection.disconnect(); //主執行緒,移除dialog,啟動安裝 runOnUiThread(new Runnable() { @Override public void run() { dialog.dismiss(); installAPK(); } }); }catch (Exception e){ e.printStackTrace(); } } }).start(); } /** * 啟動安裝apk */ private void installAPK() { Intent intent = new Intent("android.intent.action.INSTALL_PACKAGE"); intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"); startActivity(intent); } }