我試過(沒有成功),以獲得我的大apk安裝(通過adb)從自定義java應用程序,儘管從stackoverflow的幫助和幾個實驗,總是似乎失敗(見Java Application to install APK on android)。android應用程序autoupdate如果apk存在然後刪除
它所安裝的應用程序和設備僅在離線狀態下未發佈到市場上。
我決定嘗試不同的路線來解決同樣的問題;我可以將apk從java應用程序推到/sdcard/MyApp/updates/update.apk
我想當用戶運行myapp時檢查update.apk是否存在,如果存在,運行更新以MYAPP。更新完成後,我希望update.apk被刪除(以防止每次應用程序啓動時發生更新循環)。我是新來的android,我不知道如何實現上述行爲。
我的代碼是非常稀疏的功能「塊」,但包括下面給出一個想法,我在想什麼:
if (update.exists()) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/MyApp/updates" + "updates.apk")), "application/vnd.android.package-archive");
startActivity(intent);
}
//add a delete to update.apk here AFTER it has finished installing
}
我的問題是:
是否有執行上述更好的辦法所需的功能? 如何確保update.apk在刪除之前已安裝並運行?
感謝您的幫助,正如我剛纔提到的,我是Java和Android的新手,並試圖通過戰鬥。
編輯:最終的解決方案我使用:
if (updateTxt.exists()) {
try {
BufferedReader br = new BufferedReader(
new FileReader(updateTxt));
String line;
while ((line = br.readLine()) != null) {
String line2[] = line.split(" "); // split the string to get
// the
// progress
myUpdateVersion = Integer.parseInt(line2[0]); // [0] is the
// value we
// are
// interested
// in
// so set
// it.
}
} catch (IOException ex) {
return;
}
} else {
// no update so do nothing
}
if (updateApk.exists()) {
// updateIntent();
// now check the version of the update file to see if it can be
// deleted
PackageManager packageManager = getPackageManager();
PackageInfo apkPackageInfo = packageManager.getPackageInfo(
"com.myapp.myapp", 0);
if (apkPackageInfo != null) {
if (apkPackageInfo.versionCode == myUpdateVersion) {
// Update has been installed. Delete update APK
updateApk.delete();
} else {
// Update needs to be installed
updateIntent();
}
} else {
// no update so do nothing
}
}
} // end updateApk
public void updateIntent() {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(
Uri.fromFile(new File(Environment.getExternalStorageDirectory()
+ "/updates/update.apk")),
"application/vnd.android.package-archive");
startActivity(intent);
}
安迪
大衛,感謝您的回答,我已經編輯我上面的帖子顯示我最終使用的代碼。 – andy