Android程序的版本检测与更新Word文档格式.docx
《Android程序的版本检测与更新Word文档格式.docx》由会员分享,可在线阅读,更多相关《Android程序的版本检测与更新Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
否则新的无法替换旧的,提示安装未完成。
-------------------天气太冷,咯咯咯------------------------------------
这个功能做在菜单上,触发代码如下:
//==========================================================================
//菜单
//==========================================================================
privatestaticfinalStringurlApk="
http:
//3g.***.com/tool/***.apk"
;
privatestaticfinalStringurlVer="
//3g.***.com/tool/ver_apk.xml"
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
menu.add(Menu.NONE,Menu.FIRST+1,5,"
检测更新"
).setIcon(
android.R.drawable.ic_menu_upload);
menu.add(Menu.NONE,Menu.FIRST+2,4,"
退出"
).setIcon(android.R.drawable.ic_lock_power_off);
returntrue;
}
publicbooleanonOptionsItemSelected(MenuItemitem){
switch(item.getItemId()){
caseMenu.FIRST+1:
Toast.makeText(this,"
正在检测版本"
Toast.LENGTH_LONG).show();
UpdateVeruv=newUpdateVer(urlApk,urlVer,MainActivity.this);
uv.checkVer();
break;
caseMenu.FIRST+2:
confirmExit();
}
returnfalse;
检测更新因为代码比较多,写成一个类进行封装
UpdateVer.java
packageandroid.***;
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.app.Dialog;
importandroid.app.ProgressDialog;
importandroid.content.Context;
importandroid.content.DialogInterface;
importandroid.content.Intent;
import.Uri;
importandroid.os.AsyncTask;
importandroid.util.Log;
importandroid.webkit.URLUtil;
importandroid.widget.Toast;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
import.MalformedURLException;
import.URL;
import.URLConnection;
importjava.util.Properties;
importorg.xml.sax.InputSource;
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassUpdateVerextendsActivity{
privatestaticfinalStringTAG="
DOWNLOADAPK"
privateStringPastVersion;
privateStringNowVersion;
publicProgressDialogpBar;
privateStringcurrentFilePath="
"
privateStringfileEx="
privateStringfileNa="
privateStringstrURL="
privateStringVersionUri="
privateContextmContext;
privatefinalStringfileVer="
ver.cfg"
publicUpdateVer(Stringurlapk,Stringurlver,finalContextcontext){
SimpleDateFormatdf=newSimpleDateFormat("
yyyyMMddHHmmss"
);
Stringver="
ver="
+df.format(newDate());
//主要是避开手机的缓存
strURL=urlapk+ver;
VersionUri=urlver+ver;
mContext=context;
publicvoidcheckVer(){
//解析Version网页,获取版本号
getVersionxml(VersionUri);
privatevoidcompareVer(){
load();
//当有最新版本的时候
if(PastVersion!
=null&
&
!
PastVersion.equals(NowVersion)){
Dialogdialog=newAlertDialog.Builder(mContext).setTitle("
系统更新"
)
.setMessage(String.format("
发现新版本%s,目前版本为%s,请更新!
NowVersion,PastVersion))//设置内容
//设置确定按钮
.setPositiveButton("
确定"
newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,
intwhich){
pBar=newProgressDialog(mContext);
pBar.setTitle("
正在下载"
pBar.setMessage("
请稍候..."
pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
fileEx=strURL.substring(strURL.lastIndexOf("
."
)+1,strURL.length()).toLowerCase();
fileEx=fileEx.substring(0,fileEx.lastIndexOf("
));
fileNa=strURL.substring(strURL.lastIndexOf("
/"
)+1,strURL.lastIndexOf("
getFile(strURL);
}).setNegativeButton("
取消"
newDialogInterface.OnClickListener(){
intwhichButton){
//点击"
按钮之后退出程序
}).create();
//创建
//显示对话框
dialog.show();
else{
Toast.makeText(mContext,String.format("
当前为最新版本%s"
PastVersion),Toast.LENGTH_LONG).show();
privatevoidgetFile(finalStringstrPath)
{
pBar.show();
try{
if(strPath.equals(currentFilePath)){
getDataSource(strPath);
currentFilePath=strPath;
Runnabler=newRunnable(){
publicvoidrun()
}
catch(Exceptione){
Log.e(TAG,e.getMessage(),e);
};
newThread(r).start();
catch(Exceptione){
e.printStackTrace();
/*取得远程文件*/
privatevoidgetDataSource(StringstrPath)throwsException{
if(!
URLUtil.isNetworkUrl(strPath)){
Log.d("
Tag"
"
error"
else{
/*取得URL*/
URLmyURL=newURL(strPath);
/*建立联机*/
URLConnectionconn=myURL.openConnection();
conn.connect();
/*InputStream下载文件*/
InputStreamis=conn.getInputStream();
if(is==null){
tag"
thrownewRuntimeException("
没有读取到文件内容"
/*建立临时文件*/
FilemyTempFile=File.createTempFile(fileNa,"
+fileEx);
myTempFile.getAbsolutePath();
/*将文件写入临时盘*/
FileOutputStreamfos=newFileOutputStream(myTempFile);
bytebuf[]=newbyte[128];
do{
intnumread=is.read(buf);
if(numread<
=0){
fos.write(buf,0,numread);
}while(true);
/*打开文件进行安装*/
openFile(myTempFile);
try{
is.close();
catch(Exceptionex){
Log.e(TAG,"
error:
"
+ex.getMessage(),ex);
/*在手机上打开文件*/
privatevoidopenFile(Filef){
pBar.cancel();
Intentintent=newIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
/*调用getMIMEType()来取得MimeType*/
Stringtype=getMIMEType(f);
/*设定intent的file与MimeType*/
intent.setDataAndType(Uri.fromFile(f),type);
mContext.startActivity(intent);
/*判断文件MimeType的method*/
privateStringgetMIMEType(Filef){
Stringtype="
StringfName=f.getName();
/*取得扩展名*/
Stringend=fName.substring(fName.lastIndexOf("
)+1,fName.length()).toLowerCase();
/*按扩展名的类型决定MimeType*/
if(end.equals("
m4a"
)
||end.equals("
mp3"
mid"
xmf"
ogg"
wav"
)){
type="
audio"
elseif(end.equals("
3gp"
)||end.equals("
mp4"
video"
jpg"
gif"
png"
jpeg"
bmp"
image"
apk"
)){
/*android.permission.INSTALL_PACKAGES*/
application/vnd.android.package-archive"
*"
/*如果无法直接打开,就跳出软件清单给使用者选择*/
if(!
end.equals("
type+="
/*"
returntype;
privatevoidgetVersionxml(StringresourceUrl){
GetVergv=newGetVer();
gv.execute(resourceUrl);
privatebooleanload(){
Propertiesproperties=newProperties();
try{
InputStreamstream=mContext.getAssets().open(fileVer);
//FileInputStreamstream=mContext.openFileInput(fileVer);
//读取文件内容
properties.load(stream);
catch(FileNotFoundExceptione){
catch(IOExceptione){
catch(Exceptione){
PastVersion=String.valueOf(properties.get("
Version"
).toString());
//==========================================================================
//GetVer
//==========================================================================
classGetVerextendsAsyncTask<
String,Integer,String>
{
@Override
protectedStringdoInBackground(String...urlVer){
Stringdb=null;
URLurl=null;
try{
url=newURL(urlVer[0]);
catch(MalformedURLExceptione){
InputSourceis=null;
is=newInputSource(url.openStream());
is.setEncoding("
UTF-8"
db=SAXGetVersionService.readRssXml(is);
catch(Exceptione){
returndb;
protectedvoidonCancelled(){
super.onCancelled();
protectedvoidonPostExecute(Stringresult){
NowVersion=result;
compareVer();
AndroidManifest.xml要加上几句
<
uses-permissionandroid:
name="
android.permission.INTERNET"
/>
android.permission.INSTALL_PACKAGES"
/>
android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
android.permission.WRITE_EXTERNAL_STORAGE"
android.permission.RESTART_PACKAGES"
android.permission.READ_PHONE_STATE"
android.permission.ACCESS_NETWORK_STATE"
android.permission.ACCESS_COARSE_LOCATION"
android.permission.ACCESS_WIFI_STATE"
参考文章: