2015-06-01 67 views
0

我們的Android應用程序會在後臺每5分鐘自動檢查一次更新,並從我們的下載服務器下載最新的.apk文件。如何在Android程序安裝中避免多個apk安裝提示?

然後,它觸發一個關閉安裝使用下面的方法:

public static void installDownloadedApplication(Context context) { 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    File sdcard = Environment.getExternalStorageDirectory(); 
    File file = new File(sdcard, Constants.APPLICATION_CODE+".apk"); 
    Uri uri = Uri.fromFile(file); 
    intent.setDataAndType(uri, "application/vnd.android.package-archive"); 
    context.startActivity(intent); 
} 

這提示最終用戶(使用標準的Android OS應用程序安裝提示)來安裝或取消申請APK。

如果我們的應用程序中只有一個需要更新,則無論上述應用程序運行多少次,Android安裝提示都只會出現一次。

我們遇到的問題是,如果用戶長時間離開他的Android設備並且他的多個應用程序需要同時自動更新,則每個應用程序每5分鐘運行一次該代碼,但現在多次針對嘗試安裝的第二個應用程序顯示Android安裝提示。示例1:只有應用程序X獲得更新,用戶將其保留15分鐘,並且僅出現一個安裝提示符以顯示應用程序X.

例2:兩個應用X和Y得到更新,在用戶離開它15分鐘和1安裝提示出現應用X,但3安裝提示出現應用Ÿ

任何想法可能會造成什麼例2中的問題?

謝謝

回答

0

我設法通過使我們的後臺服務調用自定義活動得到它的正常工作沒有重複:

public static void installDownloadedApplication(Context context) { 
    Intent intent = new Intent(context, InstallActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intent); 
} 

那麼,我們的自定義活動做什麼用的後臺服務要做到:

/** 
* We use an activity to kick off the installer activity in order to avoid issues that arise when kicking off the apk installer from a background services 
* for multiple applications at the same time. 
* */ 
public class InstallActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     File sdcard = Environment.getExternalStorageDirectory(); 
     File file = new File(sdcard, Constants.APPLICATION_CODE+".apk"); 
     Uri uri = Uri.fromFile(file); 
     intent.setDataAndType(uri, "application/vnd.android.package-archive"); 
     this.startActivity(intent); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     finish(); 
    } 

} 
1

你的服務器告訴你最新的APK。將其與您下載區域中的相比較。如果您已經下載了最新版本,則無需再次下載。

此外,當您通過Intent開始安裝時,請記住將版本ID和日期/時間寫入共享首選項。在X小時/天過去之前,不要嘗試再次安裝相同的版本。

+0

謝謝回覆。不幸的是,我們的服務器只告訴我們該應用程序已過時。然後,應用程序通過從下載區域下載靜態命名的apk文件並進行安裝來做出響應。如果文件已經存在於設備上,它不會再次下載,但它每次都嘗試重新安裝。這是問題所在。 – dleerob

+0

那麼,你可能不應該讓用戶每5分鐘安裝一次。每天一次應該足夠了。我不能提出任何其他建議。抱歉。 –

+0

我已經想出了更多的信息,並稍微更新了原來的問題 – dleerob