androidapp版本更新
❶ 安卓app頻繁更新的意義在哪
修復低版本的部分BUG,增加新的功能。
軟體升級,指軟體從低版本向高版本的更新。由於高版本常常修復低版本的部分BUG,所以經歷了軟體升級,一般都會比原版本的性能更好,得到優化的效果,用戶也能有更好的體驗。
是指軟體開發者在編寫軟體的時候,由於設計人員考慮不全面或程序功能不完善,在軟體發行後,通過對程序的修改或加入新的功能後,以補丁的形式發布的方式。用戶把這些補丁更新,即升級完成!
或者升級軟體界面。
❷ 安卓手機如何更新軟體
若使用的是vivo手機,可進入應用商店--管理--應用更新中,點擊軟體後面的更新來升級軟體;
註:系統軟體是由我們公司不定期推送更新版本的,且每款機器獲取最新版本的時間可能不同,部分是隨系統升級而升級。
❸ 安卓手機app怎麼更新
第三方的軟體,可查看該該軟體中是否有檢查更新」,如有可進行更新;若沒有,可到軟體官網下載安裝包,直接安裝(安裝後有些軟體是將原軟體覆蓋安裝,有些軟體是不會覆蓋,會再出現一個軟體圖標)。
注意:更新軟體時消耗流量較大,建議使用WLAN更新。
你的手機是不是刷機過?可先找到完整刷機包(五個文件的),把手機刷機後,再進行更新。手機---設置---關於手機---系統更新。如果這種方法還是不能更新,下載三星KISE,做緊急固件恢復,然後再進行升級即可
對於安卓用戶來說,手機應用市場說滿天飛可是一點都不誇張,比如小米,魅族,網路,360,機鋒,應用寶等等,當我們想上線一款新版本APP時,先不說渠道打包的麻煩,單純指上傳APP到各大應用市場的工作量就已經很大了,好不容易我們把APP都上傳完了,突然發現一個會導致應用閃退的小Bug,這時那個崩潰啊,明明不是很大的改動,難道我們還要再去重新去把各大應用市場的版本再上傳更新一次?相信我,運營人員肯定會弄死你的!!
有問題,自然就會有解決問題的方案,因此我們就會想到如果在APP里內嵌自動更新的功能,那麼我們將可以省去很多麻煩,當然關於這方面功能的第三方SDK有很多。
好了,言歸正傳,今天我們自己來實現下關於APP自動更新。
流程其實並不復雜:當用戶打開APP的時候,我們讓APP去發送一個檢查版本的網路請求,或者利用服務端向APP推送一個透傳消息來檢查APP的版本,如果當前APP版本比伺服器上的舊,那麼我們就提醒用戶進行下載更新APP,當然在特定的情況下,我們也可以強制的讓用戶去升級,當然這是很不友好的,盡可能的減少這樣的做法。
好了,來梳理下流程,首先既然是一個APP的更新,那麼我們就需要去下載新的APP,然後我們需要一個通知來告訴用戶當前的下載進度,再來當APP安裝包下載完成後,我們需要去系統的安裝程序來對APP進行安裝更新。
知識點:
下載:非同步HTTP請求文件下載,並監聽當前下載進度(這里我採用了okhttp)
通知:Notification(具體用法請自行翻閱API文檔)
安裝:Intent (具體用法請自行翻閱API文檔)
❹ Android 如何通知用戶更新app的版本
會在每個應用商店的更新中顯示的
❺ 如何簡單實現安卓app自動更新功能
Android 系統4.0 命名為 Ice Cream Sandwich(簡稱ICS,冰淇淋三明治),是谷歌發布新一代操作系統。Android4.0 擁有十大重點新特性。集成谷歌電視和Chrome OS的智能停放 ,運行速度得到進一步提升。2011年10月19日上午十點,谷歌與三星聯手在中國香港舉辦發布會,公布有關Android 4.0系統信息。 十大特性: 1、Android統一版本 電視手機平板融合,Android 4.0將只提供一個版本,同時支持智能手機、平板電腦、電視等設備。至此Android系統設備將迎來統一,Android平板的窘迫現狀將得到有效改善。另一方麵包括三星、索尼在內的家電廠商日益發展的Smart TV也將迎來一次有價值的Android版本升級。 2、 全新設計的UI人性化體驗界面 谷歌在經歷了Android 2.3的版本更新之後,手機系統UI進行了不小的改進,而新的Android 3.1的用戶界面也一改此前Android單調的風格。在經歷了眾多版本的演化之後,谷歌應該對於用戶界面體驗方面有所提升,新的UI設計很有可能會迎來成熟版。 3、回歸原點 保持開源特性 此前Android 3.0曾一度宣布不採取開源措施,然而谷歌深知Android系統一大成功特性就是開源。平板上吃到的苦頭勢必在全新的Android 4.0上避免,用戶為中心的刷機資源一定會讓Android 4.0錦上添花。如果你是一個ROM的定製用戶,那麼你會對這條消息很開心,相信源碼一旦發布,很快就能看到 CyanogenMod 9。 4、同步升級Linux內核 更新3.0以上版本 Android是Google自己研發的手機平台操作系統,該平台基於開源軟體Linux,由操作系統、中間件、用戶界面和應用軟體組成,號稱是首個為移動終端打造的真正開放和完整的移動軟體 4.0的版本號就能告訴我們,這是一個大的升級版本。Linux剛剛發布Linux 3.0內核沒多久,後來又更新到了3.0.1 。 5、音頻、視頻Android Market提供資源下載 谷歌已經試水性質的推出了Google Music Beta ,允許上傳2萬首音樂到Google的雲端伺服器,自動創建播放列表在任何支持flash的設備上回放,我們有理由相信這種在Appstore影響下的數字視頻、音頻服務內容的提供也將會出現在Android上。 6、針對多核處理器優化 隨著越來越多的廠商都在推雙核的智能手機,實際的效果如何我們不予評說,但Android 4.0將特別為使用雙核乃至多核處理器的手機進行專門的優化,充分發揮雙核的性能。 7、運行速度全面提升 雖然官方暫時並沒有提及這個性能具體體現在什麼方面,但是性能上的提升是勢必會有的。 8、集成Google電視和Chrome OS的智能停放 除了在智能電視Google TV中進行融合,全新的Android 4.0也將有望借鑒Chrome OS系統的智能停放功能進行優化,這些功能有望幫助Android 4.0在多項設備終端進行整合。 9、為OEM提供了官方的主題引擎 有了這個引擎,便可通過Google的升級程序更新到這些第三方的主題。必須的,現在外觀同質化這么嚴重,主題與內涵成為了手機的重點因素之一。 10、比擬GameCenter的游戲中心 Google收購和投資如LabPixies、Slide、Jambool、Zynga等公司,這些都將會是Google手機游戲社交網路的技術儲備,而直接競爭對手會是蘋果的Games Center。這些都預示著Android下一個版本將迎來一次整合高質量游戲應用的一個平台。 全新的UI: 谷歌雲音樂:谷歌雲音樂業務最早出現Android 3.1系統版本上,但當時谷歌雲音樂應用還比較原始,現在,成熟的谷歌雲音樂將隨著Ice Cream Sandwich一起到來。谷歌雲音樂業務將允許平板電腦和智能手機離線保存已經播放過的音樂,並可以離線下載,由於採用了雲存儲技術,這些音樂將可以在用戶的所有Android系統設備中共享。 速度提升: 人們普遍將安卓平板電腦銷量不佳歸結於操作系統的不給力,認為安卓平板使用體驗距離蘋果iPad有著不小的距離,現在,隨著蘋果iOS 5和安卓Ice Cream Sandwich的發布,新一輪的比拼已經。而作為消費者,我們也相當樂於看到兩家巨頭的競爭,因為商家的競爭必將為我們消費者帶來更多價格便宜、使用體驗舒適的產品。 新特性: 1.虛擬按鍵,增大屏幕面積同時控制手機整體大小 正如之前泄漏的資料,新版Android系統取消了底部物理按鍵設計,採用虛擬按鍵,這樣可以在機身大小不變的情況下增大屏幕顯示面積,同時這樣的操作方式可以與平板機保持一致。 2.桌面插件Widgets列表呈現在標簽頁中,與程序列表類似並且共存 程序列表現在支持切換至桌面插件列表,插件列表以縮略圖展示實際顯示效果,拖動至桌面即可使用。 3.文件夾更容易創建和管理,與iOS類似 新版文件夾功能非常簡單,你只需要拖動一個圖標到另一個圖表上,就能集合成一個文件夾,然後可以重命名文件夾,並整理圖標快捷方式,支持快速撥號、文件等內容放入文件夾,這有點類似於iOS。 4.可定製的桌面系統 桌面功能增加可定製項目,比如屏幕底部的快捷欄,默認三個按鈕,你可以增加至五個,並且定義每個按鈕的功能,可以是程序、聯系人、快速撥號以及文件夾。 5.可視語音郵件 獨立應用,可集成在通話記錄中顯示,包括語音信箱留言、可視留言等內容,與語音通話記錄同時顯示。 6.日歷支持縮放操作 日期切換更加方便,可以放大查看詳細日程,支持雙指縮放操作。 7.Gmail離線搜索,兩行預覽,以及底部新快捷欄 收件箱字體得到更換,圖標、布局均重新設計,底部快捷欄可以寫郵件、搜索、訪問標簽,加入離線搜索支持,收件箱顯示兩行文字預覽,左右滑動切換Gmail會話。 8.音量下鍵+電源鍵組合截圖 9.改進虛擬鍵盤糾錯 糾錯和拼寫檢查得到改進,點擊單詞即可得到建議結果。 10.從鎖屏界面直接訪問應用程序 鎖屏界面拖動解鎖圖標至應用快捷方式可以直接打開該應用,另外鎖屏時也可以使用下拉通知欄。 11.優化復制粘貼 12.新版瀏覽器 內置瀏覽器改版,標簽系統增強,可以快捷打開標簽切換,最多同時打開16個標簽頁,支持Chrome書簽同步。 13.新的Roboto字體 顯示效果更加清晰美觀,與整個界面系統完美融合。 14.流量控制系統 第三方流量控制可以歇菜了,系統內置流量統計,可以顯示某一時段內流量使用記錄,支持設置限額報警和自動斷網,可以查看單個程序流量使用記錄並禁用其後台流量使用許可權。 15.相機應用 零快門延遲、時間間隔設置、錄制同時變焦,單張拍照一秒內完成。 16.人臉識別,刷臉解鎖 人臉識別功能得到應用,比如解鎖,可以在設置之後自拍進行屏幕解鎖 17.內置照片編輯器 內置了照片編輯器,功能比較強大,可以進行裁剪、美化、調色等修改 18.多任務列表 多任務列表展示最近運行程序縮略圖,你可以關閉某個程序來釋放內存。 19.新的圖庫布局和組織方式 全新的圖庫設計,可以自動按照主題、地理位置、人臉識別等方式組織照片的排列顯示 20.聯系人應用整合社交網路信息 新版聯系人程序功能更加豐富,可以集成社交網路信息,內置狀態更新,可查看高清圖像,可以快速發送郵件, 21.Android Beam 基於NFC的Android Beam功能可以讓兩部手機交換網站、聯系人、導航、YouTube視頻等,甚至官方電子市場的下載鏈接。
❻ 如何對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"/>
❼ 怎麼升級安卓軟體版本
若使用的是vivo手機,可查看更新軟體方法:進入應用商店--管理--應用更新中,點擊軟體後面的更新來升級軟體。
❽ android軟體的版本更新是如何實現的
l1.. 可以打開手機中的無線升級軟體 ,看是否有升級提示,若有可以升級,這是手機廠家的自動升級;2..到手機維修店去做升級系統。 3.千萬不要自己刷機升級,由於系統的不兼容性會造成變磚不能使用