package com.android.Update;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.URLUtil;
import android.widget.Toast;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;
import org.json.JSONArray;
import org.json.JSONObject;
public class UpdateActivity extends Activity {
private static final String TAG = "DOWNLOADAPK";
private String PastVersion;//旧版本号
private String NowVersion;//新版本号
public ProgressDialog pBar; //进度条
private String currentFilePath = ""; //文件
//预安装软件的扩展名
private String fileEx="";
private String fileNa="";//软件名称
//APK下载地址
//TODO 这里要自定义
private String strURL="http://open.sina.com.cn/update.apk";
//版本更新配置文件URi
//TODO 这里也是
private String VersionUri ="http://open.sina.com.cn/update.json";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
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_menu_delete);
return true;
}
//处理下载URL文件自定义的函数
private void getFile(final String strPath)
{
pBar.show();
try
{
if (strPath.equals(currentFilePath) )
{
getDataSource(strPath);
}
currentFilePath = strPath;
Runnable r = new Runnable()
{
public void run()
{
try
{
getDataSource(strPath);
}
catch (Exception e)
{
Log.e(TAG, e.getMessage(), e);
}
}
};
new Thread(r).start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
/*取得远程文件*/
private void getDataSource(String strPath) throws Exception
{
if (!URLUtil.isNetworkUrl(strPath))
{
Log.d("Tag","error");
}
else
{
/*取得URL*/
URL myURL = new URL(strPath);
/*建立联机*/
URLConnection conn = myURL.openConnection();
conn.connect();
/*InputStream 下载文件*/
InputStream is = conn.getInputStream();
if (is == null)
{
Log.d("tag","error");
throw new RuntimeException("stream is null");
}
/*建立临时文件*/
File myTempFile = File.createTempFile(fileNa, "."+fileEx);
myTempFile.getAbsolutePath();
/*将文件写入临时盘*/
FileOutputStream fos = new FileOutputStream(myTempFile);
byte buf[] = new byte[128];
do
{
int numread = is.read(buf);
if (numread <= 0)
{
break;
}
fos.write(buf, 0, numread);
}while (true);
/*打开文件进行安装*/
openFile(myTempFile);
//openFile(c);
try
{
is.close();
}
catch (Exception ex)
{
Log.d("Tag","error");
Log.e(TAG, "error: " + ex.getMessage(), ex);
}
}
}
/* 在手机上打开文件的method */
private void openFile(File f)
{
pBar.cancel();
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
/* 调用getMIMEType()来取得MimeType */
String type = getMIMEType(f);
/* 设定intent的file与MimeType */
intent.setDataAndType(Uri.fromFile(f),type);
startActivity(intent);
}
/* 判断文件MimeType的method */
private String getMIMEType(File f)
{
String type="";
String fName=f.getName();
/* 取得扩展名 */
String end=fName.substring(fName.lastIndexOf(".")+1,fName.length()).toLowerCase();
/* 按扩展名的类型决定MimeType */
if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||end.equals("xmf")||end.equals("ogg")||end.equals("wav"))
{
type = "audio";
}
else if(end.equals("3gp")||end.equals("mp4"))
{
type = "video";
}
else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||end.equals("jpeg")||end.equals("bmp"))
{
type = "image";
}
else if(end.equals("apk"))
{
/* android.permission.INSTALL_PACKAGES */
type = "application/vnd.android.package-archive";
}
else
{
type="*";
}
/*如果无法直接打开,就跳出软件清单给使用者选择 */
if(end.equals("apk"))
{
}
else
{
type += "/*";
}
return type;
}
private void delFile(String strFileName)
{
File myFile = new File(strFileName);
if(myFile.exists())
{
myFile.delete();
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
try {
String jsonversion = NetworkTool.getContent(VersionUri);
Log.d(TAG, "verjson:"+jsonversion);
JSONArray array = new JSONArray(jsonversion);
// 解析Version网页,获取版本号
if (array.length() > 0) {
JSONObject obj = array.getJSONObject(0);
NowVersion = obj.getString("verCode");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 装载获取当前的版本号
load();
//当有最新版本的时候
Log.d("update", "pastVersion:"+PastVersion+"&&Nowversion:"+NowVersion);
if(PastVersion != null&&!(PastVersion.equals(NowVersion)))
{
save();
Dialog dialog = new AlertDialog.Builder(UpdateActivity.this).setTitle("系统更新")
.setMessage("发现新版本,请更新!")// 设置内容
.setPositiveButton("确定",// 设置确定按钮
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
pBar = new ProgressDialog(UpdateActivity.this);
pBar.setTitle("正在下载");
pBar.setMessage("请稍候...");
pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
fileEx = strURL.substring(strURL.lastIndexOf(".")+1,strURL.length()).toLowerCase();
fileNa = strURL.substring(strURL.lastIndexOf("/")+1,strURL.lastIndexOf("."));
getFile(strURL);
}
}).setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// 点击"取消"按钮之后退出程序
}
}).create();// 创建
// 显示对话框
dialog.show();
}
//
else{
save();
Toast.makeText(this, "当前为最新版本", Toast.LENGTH_LONG).show();
}
return false;
}
@Override
public void onOptionsMenuClosed(Menu menu) {
// Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// Toast.makeText(this,
// "选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单",
// Toast.LENGTH_LONG).show();
// 如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用
return true;
}
boolean load ()
{
Properties properties = new Properties();
try
{
FileInputStream stream = this.openFileInput("Versionfile.cfg");
//读
- 1
- 2
- 3
- 4
- 5
- 6
前往页