編輯:關於Android編程
android apk版本更新
/**
* 獲取版本名稱
*
* @return version
*/
private String getVersionName() {
try {
// 獲取packagemanager的實例
PackageManager packageManager = getPackageManager();
// getPackageName()是你當前類的包名,0代表是獲取版本信息
PackageInfo packInfo = packageManager.getPackageInfo(
getPackageName(), 0);
version = packInfo.versionName;// versionName是獲取版本名稱還有版本號等等...
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return version;
}
activity類調用
// 這裡來檢測版本是否需要更新
UpdateManager mUpdateManager = new UpdateManager(
SettingActivity.this);
mUpdateManager.checkUpdateInfo();
public class UpdateManager {
private Context mContext;
/* 下載包安裝路徑 */
private static final String savePath = "//sdcard//updatedemo//";
private static final String saveFileName = savePath + "licaike.apk";
/* 進度條與通知ui刷新的handler和msg常量 */
private int progress;
private ProgressDialogUtil pdu;
private boolean interceptFlag = true;
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 0x123:
pdu.setProgress(progress);
break;
case 0x124: // 安裝apk
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);
pdu.dismiss();
break;
default:
break;
}
};
};
public UpdateManager(Context context) {
this.mContext = context;
}
// 外部接口讓主Activity調用
public void checkUpdateInfo() {
final AlertDialogUtil dialogUtil = new AlertDialogUtil(mContext, false,
null);
dialogUtil.setMessage("請更新新版本");
dialogUtil.setBtnPositiveValue("更新");
dialogUtil.setPositiveClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
showDownloadDialog();
dialogUtil.dismiss();
}
});
dialogUtil.setBtnNegativeValue("取消");
dialogUtil.setNegativeClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
dialogUtil.dismiss();
}
});
dialogUtil.show();
}
private void showDownloadDialog() {
// 下載apk
downLoadThread();
pdu = new ProgressDialogUtil(mContext, false, null);
pdu.setMessage("軟件正在更新中...");
pdu.setBtnNegativeValue("取消");
pdu.setNegativeClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
interceptFlag = false;
pdu.dismiss();
}
});
pdu.show();
}
private void downLoadThread() {
new Thread(new Runnable() {
@Override
public void run() {
InputStream is = null;
FileOutputStream fos = null;
try {
// 返回的安裝包url
String apkUrl = "http://d.m.hexun.com/app/licaike.apk";
URL url = new URL(apkUrl);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.connect();
int length = conn.getContentLength();
is = conn.getInputStream();
File file = new File(savePath);
if (!file.exists()) {
file.mkdir();
}
String apkFile = saveFileName;
File ApkFile = new File(apkFile);
fos = new FileOutputStream(ApkFile);
int count = 0;
byte buf[] = new byte[1024];
while (interceptFlag) {// 點擊取消就停止下載.
int numread = is.read(buf);
count += numread;
progress = (int) (((float) count / length) * 100);
// 更新進度
mHandler.sendEmptyMessage(0x123);
if (numread <= 0) {
// 下載完成通知安裝
mHandler.sendEmptyMessage(0x124);
break;
}
fos.write(buf, 0, numread);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null)
fos.close();
if (is != null)
is.close();
} catch (Exception e) {
} finally {
fos = null;
is = null;
}
}
}
}).start();
}
}
進度條你自己隨便往對話框拖個
一 前言??把android開發藝術探索第三章閱讀了,對事件分發機制有一個大概的了解,關於事件分發的文章也很多,自己也看了一些相關的文章,決定自己分析一遍記錄下來,加深映
1.基本思路①.創建已加鎖應用的數據庫(字段:_id,packagename),如果應用已加鎖,將加鎖應用的包名維護到數據庫中②.已加鎖+未加鎖 == 手機中所有應用(A
在安卓中有很多種解析方式。按照大方向有xml解析和json解析。而,細致的分,xml和json解析各有自己的很多解析方式。今天這一篇主要介紹xml解析中的pull解析。對
最近看了淘寶手機端的有些頁面是類似下面這個小球的加載效果。後來了解了下,淘寶是直接一個gif圖片實現效果的,這當然是最簡單的方法。為了加深了解屬性動畫,這次就做個類似的效