android版本自動檢測更新 版本檢測 自動更新 自動安裝

來源:互聯網
上載者:User

import java.io.File; </p><p>import java.io.FileOutputStream; </p><p>import java.io.IOException; </p><p>import java.io.InputStream; </p><p>import org.apache.http.HttpEntity;<br />import org.apache.http.HttpResponse;<br />import org.apache.http.client.ClientProtocolException;<br />import org.apache.http.client.HttpClient;<br />import org.apache.http.client.methods.HttpGet;<br />import org.apache.http.impl.client.DefaultHttpClient; </p><p>import android.app.AlertDialog;<br />import android.app.Dialog;<br />import android.app.ProgressDialog;<br />import android.content.DialogInterface;<br />import android.content.Intent;<br />import android.net.Uri;<br />import android.os.Bundle;<br />import android.os.Environment;<br />import android.os.Handler; </p><p>public class Update extends Activity {<br /> public ProgressDialog pBar;<br /> private Handler handler = new Handler(); </p><p> @Override<br /> protected void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.update);<br /> Dialog dialog = new AlertDialog.Builder(Update.this).setTitle("系統更新")<br /> .setMessage("發現新版本,請更新!")// 設定內容<br /> .setPositiveButton("確定",// 設定確定按鈕<br /> new DialogInterface.OnClickListener() { </p><p> @Override<br /> public void onClick(DialogInterface dialog,<br /> int which) {<br /> pBar = new ProgressDialog(Update.this);<br /> pBar.setTitle("正在下載");<br /> pBar.setMessage("請稍候...");<br /> pBar<br /> .setProgressStyle(ProgressDialog.STYLE_SPINNER);<br /> downFile("http://url:8765/OA.apk"); </p><p> } </p><p> }).setNegativeButton("取消",<br /> new DialogInterface.OnClickListener() {<br /> public void onClick(DialogInterface dialog,<br /> int whichButton) {<br /> // 點擊"取消"按鈕之後退出程式 </p><p> }<br /> }).create();// 建立<br /> // 顯示對話方塊<br /> dialog.show(); </p><p> } </p><p> void downFile(final String url) {<br /> pBar.show();<br /> new Thread() {<br /> public void run() {<br /> HttpClient client = new DefaultHttpClient();<br /> // params[0]代表串連的url<br /> HttpGet get = new HttpGet(url);<br /> HttpResponse response;<br /> try {<br /> response = client.execute(get);<br /> HttpEntity entity = response.getEntity();<br /> long length = entity.getContentLength();<br /> InputStream is = entity.getContent();<br /> FileOutputStream fileOutputStream = null;<br /> if (is != null) { </p><p> File file = new File(Environment<br /> .getExternalStorageDirectory(), "OA.apk");<br /> fileOutputStream = new FileOutputStream(file); </p><p> byte[] buf = new byte[1024];<br /> int ch = -1;<br /> int count = 0;<br /> while ((ch = is.read(buf)) != -1) {<br /> // baos.write(buf, 0, ch);<br /> fileOutputStream.write(buf, 0, ch);<br /> count += ch;<br /> if (length > 0) { </p><p> } </p><p> } </p><p> }<br /> fileOutputStream.flush();<br /> if (fileOutputStream != null) {<br /> fileOutputStream.close();<br /> }<br /> down();<br /> } catch (ClientProtocolException e) {<br /> // TODO Auto-generated catch block<br /> e.printStackTrace();<br /> } catch (IOException e) {<br /> // TODO Auto-generated catch block<br /> e.printStackTrace();<br /> }<br /> } </p><p> }.start(); </p><p> } </p><p> void down() {<br /> handler.post(new Runnable() {<br /> public void run() {<br /> pBar.cancel();<br /> update();<br />}<br />});<br /> } </p><p> void update() { </p><p> Intent intent = new Intent(Intent.ACTION_VIEW);<br /> intent.setDataAndType(Uri.fromFile(new File("/sdcard/OA.apk")),<br /> "application/vnd.android.package-archive");<br /> startActivity(intent);<br /> }<br />}<br />

 

 

曾經用到過的一個Android工具類,版本檢測、自動更新。通用性差,權當筆記。

 

package com.hiyo.game.pdk.tool;<br /> import java.io.File;<br /> import java.io.FileOutputStream;<br /> import java.io.InputStream;<br /> import java.net.URL;<br /> import java.net.URLConnection;<br /> import android.app.Activity;<br /> import android.app.AlertDialog;<br /> import android.app.ProgressDialog;<br /> import android.content.Context;<br /> import android.content.DialogInterface;<br /> import android.content.Intent;<br /> import android.content.pm.PackageInfo;<br /> import android.content.pm.PackageManager.NameNotFoundException;<br /> import android.net.ConnectivityManager;<br /> import android.net.NetworkInfo;<br /> import android.net.Uri;<br /> import android.util.Log;<br /> import android.webkit.URLUtil;<br /> import com.hiyo.game.pdk.activity.R;<br /> /**<br /> * Android AutoUpdate.<br /> *<br /> * lazybone/2010.08.20<br /> *<br /> * 1.Set apkUrl.<br /> *<br /> * 2.check().<br /> *<br /> * 3.add delFile() method in resume()/onPause().<br /> */<br /> public class MyAutoUpdate {<br /> public Activity activity = null;<br /> public int versionCode = 0;<br /> public String versionName = "";<br /> private static final String TAG = "AutoUpdate";<br /> private String currentFilePath = "";<br /> private String currentTempFilePath = "";<br /> private String fileEx = "";<br /> private String fileNa = "";<br /> private String strURL = "http://127.0.0.1:81/ApiDemos.apk";<br /> private ProgressDialog dialog;<br /> public MyAutoUpdate(Activity activity) {<br /> this.activity = activity;<br /> getCurrentVersion();<br /> }<br /> public void check() {<br /> if (isNetworkAvailable(this.activity) == false) {<br /> return;<br /> }<br /> if (true) {// Check version.<br /> showUpdateDialog();<br /> }<br /> }<br /> public static boolean isNetworkAvailable(Context ctx) {<br /> try {<br /> ConnectivityManager cm = (ConnectivityManager) ctx<br /> .getSystemService(Context.CONNECTIVITY_SERVICE);<br /> NetworkInfo info = cm.getActiveNetworkInfo();<br /> return (info != null && info.isConnected());<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> return false;<br /> }<br /> }<br /> public void showUpdateDialog() {<br /> @SuppressWarnings("unused")<br /> AlertDialog alert = new AlertDialog.Builder(this.activity)<br /> .setTitle("Title")<br /> .setIcon(R.drawable.icon)<br /> .setMessage("Update or not?")<br /> .setPositiveButton("Update",<br /> new DialogInterface.OnClickListener() {<br /> public void onClick(DialogInterface dialog,<br /> int which) {<br /> downloadTheFile(strURL);<br /> showWaitDialog();<br /> }<br /> })<br /> .setNegativeButton("Cancel",<br /> new DialogInterface.OnClickListener() {<br /> public void onClick(DialogInterface dialog,<br /> int which) {<br /> dialog.cancel();<br /> }<br /> }).show();<br /> }<br /> public void showWaitDialog() {<br /> dialog = new ProgressDialog(activity);<br /> dialog.setMessage("Waitting for update...");<br /> dialog.setIndeterminate(true);<br /> dialog.setCancelable(true);<br /> dialog.show();<br /> }<br /> public void getCurrentVersion() {<br /> try {<br /> PackageInfo info = activity.getPackageManager().getPackageInfo(<br /> activity.getPackageName(), 0);<br /> this.versionCode = info.versionCode;<br /> this.versionName = info.versionName;<br /> } catch (NameNotFoundException e) {<br /> e.printStackTrace();<br /> }<br /> }<br /> private void downloadTheFile(final String strPath) {<br /> fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())<br /> .toLowerCase();<br /> fileNa = strURL.substring(strURL.lastIndexOf("/") + 1,<br /> strURL.lastIndexOf("."));<br /> try {<br /> if (strPath.equals(currentFilePath)) {<br /> doDownloadTheFile(strPath);<br /> }<br /> currentFilePath = strPath;<br /> Runnable r = new Runnable() {<br /> public void run() {<br /> try {<br /> doDownloadTheFile(strPath);<br /> } catch (Exception e) {<br /> Log.e(TAG, e.getMessage(), e);<br /> }<br /> }<br /> };<br /> new Thread(r).start();<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> }<br /> }<br /> private void doDownloadTheFile(String strPath) throws Exception {<br /> Log.i(TAG, "getDataSource()");<br /> if (!URLUtil.isNetworkUrl(strPath)) {<br /> Log.i(TAG, "getDataSource() It's a wrong URL!");<br /> } else {<br /> URL myURL = new URL(strPath);<br /> URLConnection conn = myURL.openConnection();<br /> conn.connect();<br /> InputStream is = conn.getInputStream();<br /> if (is == null) {<br /> throw new RuntimeException("stream is null");<br /> }<br /> File myTempFile = File.createTempFile(fileNa, "." + fileEx);<br /> currentTempFilePath = myTempFile.getAbsolutePath();<br /> FileOutputStream fos = new FileOutputStream(myTempFile);<br /> byte buf[] = new byte[128];<br /> do {<br /> int numread = is.read(buf);<br /> if (numread <= 0) {<br /> break;<br /> }<br /> fos.write(buf, 0, numread);<br /> } while (true);<br /> Log.i(TAG, "getDataSource() Download ok...");<br /> dialog.cancel();<br /> dialog.dismiss();<br /> openFile(myTempFile);<br /> try {<br /> is.close();<br /> } catch (Exception ex) {<br /> Log.e(TAG, "getDataSource() error: " + ex.getMessage(), ex);<br /> }<br /> }<br /> }<br /> private void openFile(File f) {<br /> Intent intent = new Intent();<br /> intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);<br /> intent.setAction(android.content.Intent.ACTION_VIEW);<br /> String type = getMIMEType(f);<br /> intent.setDataAndType(Uri.fromFile(f), type);<br /> activity.startActivity(intent);<br /> }<br /> public void delFile() {<br /> Log.i(TAG, "The TempFile(" + currentTempFilePath + ") was deleted.");<br /> File myFile = new File(currentTempFilePath);<br /> if (myFile.exists()) {<br /> myFile.delete();<br /> }<br /> }<br /> private String getMIMEType(File f) {<br /> String type = "";<br /> String fName = f.getName();<br /> String end = fName<br /> .substring(fName.lastIndexOf(".") + 1, fName.length())<br /> .toLowerCase();<br /> if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")<br /> || end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {<br /> type = "audio";<br /> } else if (end.equals("3gp") || end.equals("mp4")) {<br /> type = "video";<br /> } else if (end.equals("jpg") || end.equals("gif") || end.equals("png")<br /> || end.equals("jpeg") || end.equals("bmp")) {<br /> type = "image";<br /> } else if (end.equals("apk")) {<br /> type = "application/vnd.android.package-archive";<br /> } else {<br /> type = "*";<br /> }<br /> if (end.equals("apk")) {<br /> } else {<br /> type += "/*";<br /> }<br /> return type;<br /> }<br /> }

 

//擷取package名和版本: </p><p> PackageManager manager = activity.getPackageManager(); </p><p> PackageInfo info = manager.getPackageInfo(activity.getPackageName(), 0); </p><p> packageName = info.packageName; </p><p> versionName = info.versionName;<br /> //在這裡擷取服務端版本對比 </p><p> //下載APK到本地 PACKAGE_SAVE_PATH </p><p> //安裝應用<br /> Intent intent = new Intent(Intent.ACTION_VIEW); </p><p> intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); </p><p> intent.setDataAndType(Uri.parse("file://" + PACKAGE_SAVE_PATH), </p><p> "application/vnd.android.package-archive"); </p><p> activity.startActivity(intent);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.