android實現更新
Ⅰ Android開發中更新UI的幾種常用方式
1.利用Looper更新UI界面
2.AsyncTask利用線程任務非同步更新UI界面
3.利用Runnable更新UI界面
4.使用Handler消息傳遞機制
5.使用runOnUiThread(action)方法;
Ⅱ 如何簡單實現安卓app自動更新功能
app自動更新程序可以參考如下代碼:
第一步 伺服器端:
服務端提供一個借口,或者網址,我這里就用的伺服器是tomcat,這里提供一個網址如下:
//也就是一個json數據介面
public static final String UPDATE_URL = "http://192.168.1.103:8080/update.json";
我們來看下json數據參數:
{
//app名字
appname: "愛新聞1.1",
//伺服器版本號
serverVersion: "2",
//伺服器標志
serverFlag: "1",
//是否強制更新
lastForce: "1",
//apk下載地址,這里我已經下載了官方的apk,放到了伺服器裡面
updateurl: "http://192.168.1.103:8080/36Kr.apk",
//版本的更新的描述
upgradeinfo: "V1.1版本更新,你想不想要試一下哈!!!"
}
好了以上的是伺服器端的信息,在這里不需要多說了,我們來看下客戶端的吧。
第二步 客戶端需要實現:
首先我們要去解析服務端給的json,那麼我們就要來創建一個model類了(代碼過多,這里只有欄位,getter和setter方法自己創建):
//app名字
private String appname;
//伺服器版本
private String serverVersion;
//伺服器標志
private String serverFlag;
//強制升級
private String lastForce;
//app最新版本地址
private String updateurl;
//升級信息
private String upgradeinfo;
在這里使用了一個輔助類,基本和model欄位差不多:
public class UpdateInformation {
public static String appname = MyApplication.getInstance()
.getResources().getString(R.string.app_name);
public static int localVersion = 1;// 本地版本
public static String versionName = ""; // 本地版本名
public static int serverVersion = 1;// 伺服器版本
public static int serverFlag = 0;// 伺服器標志
public static int lastForce = 0;// 之前強制升級版本
public static String updateurl = "";// 升級包獲取地址
public static String upgradeinfo = "";// 升級信息
public static String downloadDir = "wuyinlei";// 下載目錄
}
我們知道,我們在進入app的時候,這個時候如果檢測到伺服器端有了新的版本,就回彈出提示框,提示我們更新。這個我們在MainActivity裡面處理邏輯(onCreate()方法裡面):
OkhttpManager.getAsync(Config.UPDATE_URL, new OkhttpManager.DataCallBack() {
@Override
public void requestFailure(Request request, Exception e) {
}
@Override
public void requestSuccess(String result) {
try {
Log.d("wuyiunlei",result);
JSONObject object = new JSONObject(result);
UpdateInfoModel model = new UpdateInfoModel();
model.setAppname(object.getString("appname"));
model.setLastForce(object.getString("lastForce"));
model.setServerFlag(object.getString("serverFlag"));
model.setServerVersion(object.getString("serverVersion"));
model.setUpdateurl(object.getString("updateurl"));
model.setUpgradeinfo(object.getString("upgradeinfo"));
tmpMap.put(DeliverConsts.KEY_APP_UPDATE, model);
} catch (JSONException e) {
e.printStackTrace();
}
//發送廣播
sendBroadcast(new Intent(UpdateReceiver.UPDATE_ACTION));
}
});
當然了,我們也要注冊和結束廣播:
/**
* 廣播注冊
*/
private void registerBroadcast() {
mUpdateReceiver = new UpdateReceiver(false);
mIntentFilter = new IntentFilter(UpdateReceiver.UPDATE_ACTION);
this.registerReceiver(mUpdateReceiver, mIntentFilter);
}
/**
* 廣播卸載
*/
private void unRegisterBroadcast() {
try {
this.unregisterReceiver(mUpdateReceiver);
} catch (Exception e) {
e.printStackTrace();
}
}
好了,接下來我們看下我們自定義的廣播接收者UpdateReceiver .java:
/**
* 版本更新升級 廣播接受者
*
*/
Ⅲ 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版本
目前安卓手機主要採用以下幾種方式升級:
1、使用手機自帶的系統更新功能
在安卓手機的設置--關於手機中,可以看到當前安卓手機的系統版本,另外這里也有自動檢測更新系統功能。
這里就是安卓手機自帶的系統更新功能,其更新主要由手機廠商提供,像小米手機就可以很好的通過該功能升級手機系統版本。不過使用該功能升級系統,需要下載不少升級文件,因此建議大家在Wifi環境下進行。
Ps:使用手機自帶的系統更新功能僅對部分品牌手機比較實用,通常很多品牌手機的自帶的升級功能,可升級的非常慢,並且無法更新到最新的安卓系統版本,因此一般也不建議採用該方式升級。
2、下載手機系統升級包
一般手機廠商官網都會更新一些系統文件包供用戶下載升級,我們可以可以進入自己手機品牌官網下載中心,然後根據自己手機品牌型號,下載最新的系統更新升級包,下載存放在手機SD卡當中。
然後我們再進入手機設置,然後選擇「關於手機」最後找到「系統更新」選項,之後我們在選擇「存儲卡升級」,如下圖所示:
通過刷機升級安卓系統
通過刷機升級安卓手機系統,是目前大家最常見的升級方法,相比前面2種方法都是靠廠商的升級文件,其實並不靠譜,很多廠商一般除了系統有嚴重Bug外,一般都很少發布升級文件。
通過刷機升級安卓系統很簡單,大家可以根據自己手機的品牌型號,找到適合自己手機的ROM系統,之後下載去刷機升級即可。另外目前也有很多一鍵刷機工具,如刷機精靈、刷機大師等等都可以一鍵檢測安卓手機品牌型號,然胡找到匹配的安卓系統,我們可以實現一鍵刷機。
Ⅳ android中如何實現UI的實時更新
1、在主線程中啟動一個子線程
首先,我們需要在主線程中啟動一個子線程,這個比較簡單,直接在MainActivity的onCreate()方法中調用如下方法即可:
newThread(mRunnable).start();
2、在子線程中發送Message給Handler
在創建子線程時,我們使用了Runnable介面對象mRunnable。這里,只需要實現Runnable介面,並重寫該介面的run()方法,在run()方法中實現每1秒發送一條Message給Handler即可。具體實現方法如下:
/*
*Function:實現run()方法,每1秒發送一條Message給Handler
*/
privateRunnablemRunnable=newRunnable(){
publicvoidrun(){
while(true){
try{
Thread.sleep(1000);
mHandler.sendMessage(mHandler.obtainMessage());
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
};
3、Handler接收Message通知
最後,我們創建一個Handler對象,用來接收Message通知。在收到Message通知後,完成刷新UI的操作即可。具體實現方法如下:
/*
*Function:實現handleMessage()方法,用於接收Message,刷新UI
*/
privateHandlermHandler=newHandler(){
publicvoidhandleMessage(Messagemsg){
super.handleMessage(msg);
refreshUI();
}
};
4、刷新UI
由以上的代碼可以看出,刷新UI的操作,我們是放在refreshUI()方法中來完成的。refreshUI()方法的實現也很簡單,調用HttpUtils工具類中的getInputStream()方法,獲得圖1所示Web工程的頁面內容輸入流,再將該輸入流轉化為字元串,放入TextView控制項中進行顯示即可。具體實現方法如下:
/*
*Function:刷新UI
*/
privatevoidrefreshUI(){
try{
InputStreaminputStream=HttpUtils.getInputStream();
StringresultData=HttpUtils.getResultData(inputStream);
mTextView.setText(resultData);
}catch(IOExceptione){
e.printStackTrace();
}
}
Ⅵ android版本怎麼更新
國內的安卓手機系統基於的 Android 版本更新一般是由手機廠商推送的軟體更新實現的,如果手機在維護周期內,可在手機的設置中手動檢查更新,當手機長時間未收到更新可能意味著該種型號的手機已停止系統維護,也不會再有 Android 版本的升級。
另外,國內的手機特別是低端手機,系統維護周期較短,常常僅有一次的 Android 底層版本的升級甚至是沒有。國內的安卓手機系統,像 EMUI、MIUI、Color OS、Origin OS等是基於 AOSP 開發的,自身有著版本號,近幾年也逐漸與 Android 的版本號同步,在手機的設置頁面可以看到這一點。
如果對 Android 的版本號有著迫切的追求的話,可以通過加入系統升級的內測計劃或者使用一些第三方的 ROM 來實現。
Ⅶ android 怎麼實現應用內更新
android 實現應用內更新的方法為:
1、新建一個Android工程命名為:UpdateDemo。
2、新建一個UpdateManager.java類,負責軟體更新功能模塊,代碼如下:
package com.tutor.update;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;
public class UpdateManager {
private Context mContext;
//提示語
private String updateMsg = "有最新的軟體包哦,親快下載吧~";
//返回的安裝包url
private String apkUrl = "http://softfile.3g.qq.com:8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk";
private Dialog noticeDialog;
private Dialog downloadDialog;
/* 下載包安裝路徑 */
private static final String savePath = "/sdcard/updatedemo/";
private static final String saveFileName = savePath + "UpdateDemoRelease.apk";
/* 進度條與通知ui刷新的handler和msg常量 */
private ProgressBar mProgress;
private static final int DOWN_UPDATE = 1;
private static final int DOWN_OVER = 2;
private int progress;
private Thread downLoadThread;
private boolean interceptFlag = false;
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case DOWN_UPDATE:
mProgress.setProgress(progress);
break;
case DOWN_OVER:
installApk();
break;
default:
break;
}
};
};
public UpdateManager(Context context) {
this.mContext = context;
}
//外部介面讓主Activity調用
public void checkUpdateInfo(){
showNoticeDialog();
}
private void showNoticeDialog(){
AlertDialog.Builder builder = new Builder(mContext);
builder.setTitle("軟體版本更新");
builder.setMessage(updateMsg);
builder.setPositiveButton("下載", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
showDownloadDialog();
}
});
builder.setNegativeButton("以後再說", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
noticeDialog = builder.create();
noticeDialog.show();
}
private void showDownloadDialog(){
AlertDialog.Builder builder = new Builder(mContext);
builder.setTitle("軟體版本更新");
final LayoutInflater inflater = LayoutInflater.from(mContext);
View v = inflater.inflate(R.layout.progress, null);
mProgress = (ProgressBar)v.findViewById(R.id.progress);
builder.setView(v);
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
interceptFlag = true;
}
});
downloadDialog = builder.create();
downloadDialog.show();
downloadApk();
}
private Runnable mdownApkRunnable = new Runnable() {
@Override
public void run() {
try {
URL url = new URL(apkUrl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.connect();
int length = conn.getContentLength();
InputStream is = conn.getInputStream();
File file = new File(savePath);
if(!file.exists()){
file.mkdir();
}
String apkFile = saveFileName;
File ApkFile = new File(apkFile);
FileOutputStream fos = new FileOutputStream(ApkFile);
int count = 0;
byte buf[] = new byte[1024];
do{
int numread = is.read(buf);
count += numread;
progress =(int)(((float)count / length) * 100);
//更新進度
mHandler.sendEmptyMessage(DOWN_UPDATE);
if(numread <= 0){
//下載完成通知安裝
mHandler.sendEmptyMessage(DOWN_OVER);
break;
}
fos.write(buf,0,numread);
}while(!interceptFlag);//點擊取消就停止下載.
fos.close();
is.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
}
};
/**
* 下載apk
* @param url
*/
private void downloadApk(){
downLoadThread = new Thread(mdownApkRunnable);
downLoadThread.start();
}
/**
* 安裝apk
* @param url
*/
private void installApk(){
File apkfile = new File(saveFileName);
if (!apkfile.exists()) {
return;
}
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
mContext.startActivity(i);
}
}
第三步:在MainActivity.java也就是主Activity調用,代碼如下:
package com.tutor.update;
import android.app.Activity;
import android.os.Bundle;
public class MainAcitivity extends Activity {
private UpdateManager mUpdateManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//這里來檢測版本是否需要更新
mUpdateManager = new UpdateManager(this);
mUpdateManager.checkUpdateInfo();
}
}
3、添加程序所用的資源與許可權:
下載的時候用到了ProgressBar,所以事先寫了一個progress.xml布局文件,代碼如下:
<?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="wrap_content">
<ProgressBar
android:id="@+id/progress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
/>
</LinearLayout>
4、運行查看。