www.tjgcgs88.cn-狠狠久久亚洲欧美专区不卡,久久精品国产99久久无毒不卡,噼里啪啦国语版在线观看,zσzσzσ女人极品另类

  • <strike id="qgi8o"><td id="qgi8o"></td></strike>
  • <ul id="qgi8o"><acronym id="qgi8o"></acronym></ul>
  • <li id="qgi8o"></li>
    <ul id="qgi8o"></ul>
    <strike id="qgi8o"><rt id="qgi8o"></rt></strike>
    <ul id="qgi8o"><center id="qgi8o"></center></ul>
  • <kbd id="qgi8o"></kbd>

    android 怎么檢查新版本并且更新

    在Android中,如何檢測(cè)新版本并進(jìn)行更新?首先,需要在Manifest中獲取當(dāng)前版本的信息。接著,從服務(wù)器獲取版本號(hào)并與當(dāng)前版本進(jìn)行比較,如果不匹配,則提示用戶進(jìn)行升級(jí)。如果用戶點(diǎn)擊確定,系統(tǒng)將自動(dòng)從服務(wù)器下載并進(jìn)行升級(jí)。如果點(diǎn)擊取消,則進(jìn)入程序主界面。

    服務(wù)器端存儲(chǔ)apk文件和版本信息,通過(guò)version.xml文件便于比對(duì)更新。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>檢測(cè)到最新版本,請(qǐng)及時(shí)更新!</description>

    <url_server>http://192.168.1.99/version.xml</url_server>

    </info>

    通過(guò)一個(gè)實(shí)體類獲取上述信息。

    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和版本信息地址都放在服務(wù)器端的version.xml里,方便管理。apk地址可以放在strings.xml里,但版本信息必須放在服務(wù)器端。

    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 android.app.Activity;

    import android.app.AlertDialog;

    import android.app.AlertDialog.Builder;

    import android.app.ProgressDialog;

    import android.content.Context;

    import android.content.Intent;

    import android.os.Bundle;

    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.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) {

    e.printStackTrace();

    }

    }

    });

    }

    private String getVersionName() throws Exception {

    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, "版本號(hào)相同");

    Message msg = new Message();

    msg.what = UPDATA_NONEED;

    handler.sendMessage(msg);

    } else {

    Log.i(TAG, "版本號(hào)不相同");

    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) {

    switch (msg.what) {

    case UPDATA_NONEED:

    Toast.makeText(getApplicationContext(), "不需要更新", Toast.LENGTH_SHORT).show();

    break;

    case UPDATA_CLIENT:

    showUpdataDialog();

    break;

    case GET_UNDATAINFO_ERROR:

    Toast.makeText(getApplicationContext(), "獲取服務(wù)器更新信息失敗", 1).show();

    break;

    case DOWN_ERROR:

    Toast.makeText(getApplicationContext(), "下載新版本失敗", 1).show();

    break;

    }

    }

    };

    protected void showUpdataDialog() {

    AlertDialog.Builder builder = new Builder(this);

    builder.setTitle("版本升級(jí)");

    builder.setMessage(info.getDescription());

    builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

    Log.i(TAG, "下載apk,更新");

    downLoadApk();

    }

    });

    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

    }

    });

    AlertDialog dialog = builder.create();

    dialog.show();

    }

    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();

    }

    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 {

    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;

    }

    }

    }

    在AndroidManifest.xml中添加必要的權(quán)限:

    <uses-permission android:name="android.permission.INTERNET"/>

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    相關(guān)評(píng)說(shuō):

  • 當(dāng)涂振15687393825: android軟件的版本更新是如何實(shí)現(xiàn)的 -
    襄城縣基本: ______ 由安卓團(tuán)隊(duì)研發(fā)的新版本通過(guò)網(wǎng)絡(luò)通知你,手機(jī)檢測(cè)到需要更新的命令,便會(huì)通過(guò)網(wǎng)絡(luò)下載新版本重新裝在手機(jī)里(相當(dāng)于刷機(jī))從而實(shí)現(xiàn)了系統(tǒng)更新.
  • 當(dāng)涂振15687393825: 華為手機(jī)安卓系統(tǒng)如何升級(jí)? -
    襄城縣基本: ______ 安卓手機(jī)系統(tǒng)升級(jí)方法:一、OTA升級(jí):保證手機(jī)聯(lián)網(wǎng),進(jìn)入手機(jī)的設(shè)置-關(guān)于本機(jī)-系統(tǒng)更新,點(diǎn)擊后下載升級(jí)包完成升級(jí)操作,也可以通過(guò)手機(jī)菜單找到系統(tǒng)更新圖標(biāo)點(diǎn)擊直接升級(jí);二、本地升級(jí):電腦下載好升級(jí)包,拷至手機(jī)存儲(chǔ)或者存儲(chǔ)卡,通過(guò)系統(tǒng)更新或者資源管理器打開本地升級(jí)包直接升級(jí);三、PC套件升級(jí):電腦安裝手機(jī)品牌官方的PC套件或者是刷機(jī)工具,數(shù)據(jù)線連接手機(jī),選擇下載好的升級(jí)包或者直接在線下載升級(jí)包通過(guò)電腦完成升級(jí).
  • 當(dāng)涂振15687393825: 小米怎樣升級(jí)android系統(tǒng) -
    襄城縣基本: ______ 進(jìn)入設(shè)置里面,最上面的我的設(shè)備,點(diǎn)進(jìn)去再進(jìn)去miui版本進(jìn)去檢查更新即可.此方法適用新機(jī)型.在手機(jī)里面找到系統(tǒng)更新應(yīng)用,查找更新升級(jí).當(dāng)然如果你機(jī)子root或者刷了第三方包的話更新不了的.
  • 當(dāng)涂振15687393825: Android2.1怎么才能檢測(cè)到新版本而升級(jí)?需要接到電腦上操作么
    襄城縣基本: ______ 通過(guò)usb在電腦上安裝手機(jī)驅(qū)動(dòng)就可以檢測(cè)升級(jí)
  • 當(dāng)涂振15687393825: 華為手機(jī)怎么升級(jí)安卓系統(tǒng) -
    襄城縣基本: ______ 手機(jī)有多種方法可以升級(jí),列出以下兩種:1.在線升級(jí) 前提必須連接到網(wǎng)絡(luò),建議在 WLAN 下升級(jí).升級(jí)過(guò)程中,保證電池電量大于30%.操作步驟:點(diǎn)擊設(shè)置 > 系統(tǒng)更新,檢測(cè)是否有新版本,點(diǎn)擊新版本下載軟件升級(jí)包.如果點(diǎn)擊檢查更新...
  • 當(dāng)涂振15687393825: android版本更新如何判斷 -
    襄城縣基本: ______ 假設(shè)你是做android開發(fā)的.你應(yīng)該明白AndroidManifest.xml這個(gè)文件里的versionCode和versionName;你也應(yīng)該知道SQLiteOpenHelper里的onUpgrade()是干什么用的;你還應(yīng)該知道程序升級(jí)是必須具有相同的簽名和包名才行的.
  • 當(dāng)涂振15687393825: 安卓手機(jī)怎樣重新安裝系統(tǒng)? -
    襄城縣基本: ______ 你好,手機(jī)升級(jí)有兩種:1、在手機(jī)主菜單—工具—系統(tǒng)升級(jí)—檢查到新版本更新即可,由于下載固件包需要耗費(fèi)數(shù)據(jù)流量,建議盡量使用WIFI網(wǎng)絡(luò)進(jìn)行操作.2、手動(dòng)操作通過(guò)工程模式刷機(jī)升級(jí),到官網(wǎng)下載系統(tǒng)包 操作步驟:先備份好資料,然后下載固件包,復(fù)制到手機(jī)存儲(chǔ)的根目錄,關(guān)機(jī),在關(guān)機(jī)的狀態(tài)下同時(shí)按住電源鍵和音量減鍵進(jìn)入工程模式,清除數(shù)據(jù)和緩存,手動(dòng)選擇安裝文件,重啟手機(jī)即可. 如果您不會(huì)刷機(jī),建議送到客戶服務(wù)刷機(jī)處理
  • 當(dāng)涂振15687393825: 酷派手機(jī)7020安卓咋升級(jí)?酷派手機(jī)7020安卓咋升級(jí)
    襄城縣基本: ______ 安卓流量監(jiān)控V2.1.3怎么升級(jí),找到入口就很簡(jiǎn)單了.一般在軟件的主菜單中會(huì)有幫助、更新等說(shuō)明文字,點(diǎn)開看看,就有可能看到在線升級(jí) /www.waptw.com/sys/prd/prd/coolpad-7020-zmsj-1653.html 、檢查更新等選項(xiàng),點(diǎn)擊后,手機(jī)就會(huì)自動(dòng)檢測(cè)新版本,然后你按照提示進(jìn)行操作就可以了.前提是手機(jī)能連網(wǎng)的狀態(tài).或者直接在天網(wǎng)找到新版本下載到手機(jī)進(jìn)行安裝就可以了.
  • 當(dāng)涂振15687393825: U12+如何更新系統(tǒng)軟件版本? -
    襄城縣基本: ______ 在安裝系統(tǒng)軟件更新前,您可以先檢查手機(jī)上當(dāng)前的 Android 版本.在主屏幕中,找到并點(diǎn)擊設(shè)置.點(diǎn)擊系統(tǒng) > 關(guān)于手機(jī) > 軟件信息.檢查 Android 版本下的信息.
  • 當(dāng)涂振15687393825: 華為p9怎么更新安卓5.0系統(tǒng) -
    襄城縣基本: ______ 升級(jí)前注意事項(xiàng)1、EMUI 5.0 升級(jí)不會(huì)清除用戶數(shù)據(jù),但建議在升級(jí)前最好對(duì)所有重要數(shù)據(jù)進(jìn)行備份.2、EMUI 5.0 僅適用于指定適配機(jī)型(EVA-AL00/AL10/CL00/TL00/DL00),不支持其它機(jī)型.3、EMUI 5.0 未發(fā)布SD卡刷包,如發(fā)現(xiàn)網(wǎng)上有...
  • 欧美性XXXXX极品瑜伽FREE| 一边摸一边抽搐一进一出视频| gogogo高清视频大全| 日日噜噜夜夜躁躁狠狠| 一个人看的www高清视频下载| 国产精品进线69影院| 国产成a人亚洲精v品在线观看| 日韩不卡在线视频| 欧美激情精品久久久久久久| 大地资源在线观看中文免费|