2017-10-09 167 views
0

我已經編寫了一個應用程序更新程序庫,用於在有新版本可用時從遠程主機下載更新的apk。然後提示用戶安裝apk。我想知道是否有任何方法來聽取安裝完成,以便我可以在安裝後刪除apk。另外,接收更新的應用程序是當前正在運行的應用程序,我不知道這是否意味着應用程序在更新安裝發生時被終止。如何刪除Android安裝後的apk

+2

https://developer.android.com/reference/android/content/Intent.html#EXTRA_RETURN_RESULT – CommonsWare

+0

你能做出如何實現上述功能或給予的資源,舉了一個例子,請的例子嗎?我不認爲我正確使用它。 –

+0

https://gitlab.com/fdroid/fdroidclient/blob/833ae329e45905b36c60af9f8f11176d77df5280/app/src/main/java/org/fdroid/fdroid/installer/DefaultInstallerActivity.java - 基本上,使用'EXTRA_RETURN_RESULT',您可以使用'startActivityForResult( )''''onActivityResult()',就像你使用其他動作(例如'ACTION_GET_CONTENT')一樣。 – CommonsWare

回答

0

由於CommonsWare在評論中說我需要使用startActivityForResult,然後onActivityResult將在下次應用打開時調用。這就是我所做的。

@Override 
public void onInstallClick() { 
    File file = new File(getActivity().getFilesDir(), mParameters.getPackageName() + ".apk"); 

    if (!file.exists()) 
     return; 

    Uri uri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", file); 

    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setData(uri); 
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    intent.putExtra(Intent.EXTRA_RETURN_RESULT, true); 
    startActivityForResult(intent, REQUEST_INSTALL); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_INSTALL) { 
     if (resultCode == Activity.RESULT_OK) { 
      File file = new File(getActivity().getFilesDir(), mParameters.getPackageName() + ".apk"); 

      if (file.exists()) 
       file.delete(); 
     } 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
}