❶ 如何對android的版本進行檢測與更新
一、准備
1.檢測當前版本的信息AndroidManifest.xml-->manifest-->android:versionName。
2.從伺服器獲取版本號(版本號存在於xml文件中)並與當前檢測到的版本進行匹配,如果不匹配,提示用戶進行升級,如果匹配則進入程序主界面。
3.當提示用戶進行版本升級時,如果用戶點擊了確定,系統將自動從伺服器上下載並進行自動升級,如果點擊取消將進入程序主界面。
二、效果圖
三、必要說明
伺服器端存儲apk文件,同時有version.xml文件便於比對更新。
<?xml version="1.0" encoding="utf-8"?>
<info>
<version>2.0</version>
<url>http://192.168.1.187:8080/mobilesafe.apk</url>
<description>檢測到最新版本,請及時更新!</description>
<url_server>http://192.168.1.99/version.xml</url_server>
</info>
通過一個實體類獲取上述信息。
package com.android;
public class UpdataInfo {
private String version;
private String url;
private String description;
private String url_server;
public String getUrl_server() {
return url_server;
}
public void setUrl_server(String url_server) {
this.url_server = url_server;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
apk和版本信息地址都放在伺服器端的version.xml里比較方便,當然如果伺服器端不變動,apk地址可以放在strings.xml里,不過版本號信息是新的,必須放在伺服器端,xml地址放在strings.xml。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, VersionActivity!</string>
<string name="app_name">Version</string>
<string name="url_server">http://192.168.1.99/version.xml</string>
</resources>
不知道讀者發現沒有,筆者犯了個錯誤,那就是url_server地址必須放在本地,否則怎麼讀取version.xml,所以url_server不必在實體類和version里添加,畢竟是現需要version地址也就是url_server,才能夠讀取version。
三、代碼實現
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_getVersion"
android:text="檢查更新"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
package com.android;
import java.io.InputStream;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
public class UpdataInfoParser {
public static UpdataInfo getUpdataInfo(InputStream is) throws Exception{
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "utf-8");
int type = parser.getEventType();
UpdataInfo info = new UpdataInfo();
while(type != XmlPullParser.END_DOCUMENT ){
switch (type) {
case XmlPullParser.START_TAG:
if("version".equals(parser.getName())){
info.setVersion(parser.nextText());
}else if ("url".equals(parser.getName())){
info.setUrl(parser.nextText());
}else if ("description".equals(parser.getName())){
info.setDescription(parser.nextText());
}
break;
}
type = parser.next();
}
return info;
}
}
package com.android;
import java.io.File;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class VersionActivity extends Activity {
private final String TAG = this.getClass().getName();
private final int UPDATA_NONEED = 0;
private final int UPDATA_CLIENT = 1;
private final int GET_UNDATAINFO_ERROR = 2;
private final int SDCARD_NOMOUNTED = 3;
private final int DOWN_ERROR = 4;
private Button getVersion;
private UpdataInfo info;
private String localVersion;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getVersion = (Button) findViewById(R.id.btn_getVersion);
getVersion.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
localVersion = getVersionName();
CheckVersionTask cv = new CheckVersionTask();
new Thread(cv).start();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
private String getVersionName() throws Exception {
//getPackageName()是你當前類的包名,0代表是獲取版本信息
PackageManager packageManager = getPackageManager();
PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(),
0);
return packInfo.versionName;
}
public class CheckVersionTask implements Runnable {
InputStream is;
public void run() {
try {
String path = getResources().getString(R.string.url_server);
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
// 從伺服器獲得一個輸入流
is = conn.getInputStream();
}
info = UpdataInfoParser.getUpdataInfo(is);
if (info.getVersion().equals(localVersion)) {
Log.i(TAG, "版本號相同");
Message msg = new Message();
msg.what = UPDATA_NONEED;
handler.sendMessage(msg);
// LoginMain();
} else {
Log.i(TAG, "版本號不相同 ");
Message msg = new Message();
msg.what = UPDATA_CLIENT;
handler.sendMessage(msg);
}
} catch (Exception e) {
Message msg = new Message();
msg.what = GET_UNDATAINFO_ERROR;
handler.sendMessage(msg);
e.printStackTrace();
}
}
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case UPDATA_NONEED:
Toast.makeText(getApplicationContext(), "不需要更新",
Toast.LENGTH_SHORT).show();
case UPDATA_CLIENT:
//對話框通知用戶升級程序
showUpdataDialog();
break;
case GET_UNDATAINFO_ERROR:
//伺服器超時
Toast.makeText(getApplicationContext(), "獲取伺服器更新信息失敗", 1).show();
break;
case DOWN_ERROR:
//下載apk失敗
Toast.makeText(getApplicationContext(), "下載新版本失敗", 1).show();
break;
}
}
};
/*
*
* 彈出對話框通知用戶更新程序
*
* 彈出對話框的步驟:
* 1.創建alertDialog的builder.
* 2.要給builder設置屬性, 對話框的內容,樣式,按鈕
* 3.通過builder 創建一個對話框
* 4.對話框show()出來
*/
protected void showUpdataDialog() {
AlertDialog.Builder builer = new Builder(this);
builer.setTitle("版本升級");
builer.setMessage(info.getDescription());
//當點確定按鈕時從伺服器上下載 新的apk 然後安裝 װ
builer.setPositiveButton("確定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "下載apk,更新");
downLoadApk();
}
});
builer.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//do sth
}
});
AlertDialog dialog = builer.create();
dialog.show();
}
/*
* 從伺服器中下載APK
*/
protected void downLoadApk() {
final ProgressDialog pd; //進度條對話框
pd = new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMessage("正在下載更新");
pd.show();
new Thread(){
@Override
public void run() {
try {
File file = DownLoadManager.getFileFromServer(info.getUrl(), pd);
sleep(3000);
installApk(file);
pd.dismiss(); //結束掉進度條對話框
} catch (Exception e) {
Message msg = new Message();
msg.what = DOWN_ERROR;
handler.sendMessage(msg);
e.printStackTrace();
}
}}.start();
}
//安裝apk
protected void installApk(File file) {
Intent intent = new Intent();
//執行動作
intent.setAction(Intent.ACTION_VIEW);
//執行的數據類型
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);
}
}
package com.android;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.ProgressDialog;
import android.os.Environment;
public class DownLoadManager {
public static File getFileFromServer(String path, ProgressDialog pd) throws Exception{
//如果相等的話表示當前的sdcard掛載在手機上並且是可用的
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
//獲取到文件的大小
pd.setMax(conn.getContentLength());
InputStream is = conn.getInputStream();
File file = new File(Environment.getExternalStorageDirectory(), "updata.apk");
FileOutputStream fos = new FileOutputStream(file);
BufferedInputStream bis = new BufferedInputStream(is);
byte[] buffer = new byte[1024];
int len ;
int total=0;
while((len =bis.read(buffer))!=-1){
fos.write(buffer, 0, len);
total+= len;
//獲取當前下載量
pd.setProgress(total);
}
fos.close();
bis.close();
is.close();
return file;
}
else{
return null;
}
}
}
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
❷ Android每天檢測一次是否有更新
1.檢測當前版本的信息AndroidManifest.xml-->manifest-->android:versionName。
2.從伺服器獲取版本號(版本號存在於xml文件中)並與當前檢測到的版本進行匹配,如果不匹配,提示用戶進行升級,如果匹配則進入程序主界面。
3.當提示用戶進行版本升級時,如果用戶點擊了確定,系統將自動從伺服器上下載並進行自動升級,如果點擊取消將進入程序主界面。
❸ 安卓系統怎麼升級8.0以上
目前安卓端8.0版本的系統已經推送至用戶手機中,有需要的用戶可以直接通過系統升級通道升級8.0,不過很多手機對8.0系統都會出現卡頓現象,請確認自己的手機足夠使用安卓8.0系統。安卓8.0升級可以能通過常規操作實現。
1、打開手機「設置」。
雖然大部分手機可以安裝安卓8.0,但是要以手機廠商適配為准,部分手機還是不能安裝的,具體能否安裝可以上網咨詢或在手機營業廳咨詢,也可密切關注官網公布的信息。安裝系統前要先確保自己手機有足夠的內層空間,建議在備份數據之後,清理一下內存卡和緩存,避免不必要的麻煩。
❹ 華為手機安卓系統如何升級
材料/工具:華為P10
1、打開手機進入主屏幕,點擊設置按鈕;
❺ Android 檢查版本升級應該怎麼做
我們平時升級手機系統都通過刷機軟體來升級。這樣弄不好就會把你的手機變成板磚的。其實我們可以隨時通過更新手機版本來完成手機系統的升級,即安全又方便。 一、手機升級 1、在更新升級之前首先要將手機裡面的重要數據進行備份,以免丟失。備份數據可以通過手機同步助手或者是91手機助手等同步工具來進行備份,如圖: 2、備份完成以後,點擊手機里的設置,進入到手機設置窗口,如圖: 3、進入到手機設置窗口之後,在窗口上面點擊通用,如圖: 4、點擊通用之後,進入到通用窗口,在窗口上面點擊系統升級,如圖: 5、點擊系統升級之後進入到系統升級窗口,在窗口上面點擊立即檢查更新,如果你的手機系統是最新狀態就不用升級了,如圖有更新的版本就需要更新的版本下載到手機上面,如圖: 6、我們可以通過把系統升級設置為自動檢查,這樣可以再有系統的更新版本的時候自動提醒更新升級。手機系統更新版版本下載之後安裝到手機上面,需要重新啟動手機才可以完成的。 二、官網升級 1、每個手機的官網都有提供手機系統固件升級的升級包,我們只需要進入到手機官網的下載頁面,我是用的是vivo手機,如圖: 2、進入到下載頁面,找到自己手機型號相匹配 的固件升級包,然後下載到電腦上,再通過電腦傳到手機上面進行安裝就可以了。 注意: 1、不管是手機升級還是官網升級都要保證手機的電量充足,避免在升級的過程中缺電關機,造成升級失敗 2、不同品牌型號的手機,系統升級更新在「設置」里的位置可能不太一樣
❻ 安卓手機系統怎樣升級到最新版本
若使用的是vivo手機,可在手機的設置--系統升級頁面檢測更新,手機搜索到更新消息會在該頁面有提示。
❼ android版本更新如何判斷
假設你是做android開發的。
你應該明白AndroidManifest.xml這個文件里的versionCode和versionName;
你也應該知道SQLiteOpenHelper里的onUpgrade()是干什麼用的;
你還應該知道程序升級是必須具有相同的簽名和包名才行的。
❽ 安卓手機版本太低怎麼升級
安卓手機系統升級方法:
一、OTA升級:保證手機聯網,進入手機的設置-關於本機-系統更新,點擊後下載升級包完成升級操作,也可以通過手機菜單找到系統更新圖標點擊直接升級;
二、本地升級:電腦下載好升級包,拷至手機存儲或者存儲卡,通過系統更新或者資源管理器打開本地升級包直接升級;
三、PC套件升級:電腦安裝手機品牌官方的PC套件或者是刷機工具,數據線連接手機,選擇下載好的升級包或者直接在線下載升級包通過電腦完成升級。
❾ Android系統可以升級嗎怎麼升級
安卓系統可以升級,升級過程如下:
下面以升級Android2.3.4為例子,注意:Android2.3.4隻支持從Android2.3.3升級,如果系統是Android2.3.1的話,必須要先升級到Android2.3.3才可以再升級為2.3.4。
另外,這個升級是增量升級,並不會刪除原先系統中的數據,所以大家可以放心升級。
第一步:先要手機下載Android2.3.4的升級數據包,我用的電腦給你搜了一下。
甜點命名法開始於Android 1.5發布的時候。作為每個版本代表的甜點的尺寸越變越大,然後按照26個字母數序:紙杯蛋糕(Android 1.5),甜甜圈(Android 1.6),松餅(Android 2.0/2.1),凍酸奶(Android 2.2),姜餅(Android 2.3),蜂巢(Android 3.0)。
冰激凌三明治(Android 4.0),果凍豆(Jelly Bean,Android4.1和Android 4.2),奇巧(KitKat,Android 4.4),棒棒糖(Lollipop,Android 5.0),棉花糖(Marshmallow,Android 6.0),牛軋糖(Nougat,Android 7.0),奧利奧(Oreo,Android 8.0)。
❿ Android檢查版本升級應該怎麼做
軍糧行統扶搖直上偽亮