Android 擷取android安裝apk框的安裝狀態(如點擊取消、返回)

來源:互聯網
上載者:User

標籤:文章   color   div   cte   api   rom   安裝   程式   pack   

最近鼓搗android,碰到個問題,因為沒有root許可權,需要調用Intent安裝apk,但需要擷取使用者是否安裝了(如,使用者點擊了返回或取消),查了很多文章,最後可以解決,但有瑕疵,解決方案如下:

public static void installPackage(Context context, File file, int requestCode) {    // 安裝之前先記錄預先安裝APK檔案的名字,以用於返回結果時根據requestCode擷取安裝的apk packageName    MainActivity.m_mapInstallApkData.put(requestCode, file.getName());    //gxj: 如果主介面沒有顯示,需要調出主介面到前台    Intent it1 = new Intent(context, MainActivity.class);    it1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);    context.startActivity(it1);        //gxj: <span style="color:#ff0000;">不使用FLAG_ACTIVITY_NEW_TASK是因為無法擷取result</span>,同時又要保持多個apk(task)的安裝(FLAG_ACTIVITY_SINGLE_TOP / FLAG_ACTIVITY_PREVIOUS_IS_TOP)    //<span style="color:#ff0000;">對於使用FLAG_ACTIVITY_SINGLE_TOP / FLAG_ACTIVITY_PREVIOUS_IS_TOP的情況,startActivityForResult只有在所有的安裝介面消失的時候才會有返回,且返回的resultCode都是0,疑惑,所以在返回後需要檢查否安裝成功的判斷</span>    //不能使用Intent.FLAG_ACTIVITY_NEW_TASK是因為Intent.FLAG_ACTIVITY_NEW_TASK無法獲得返回的結果;不能使用Intent.FLAG_ACTIVITY_CLEAR_TOP是因為可能會有多個apk同時安裝    Intent it2 = new Intent();    it2.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP );    //或FLAG_ACTIVITY_PREVIOUS_IS_TOP    it2.setAction(android.content.Intent.ACTION_VIEW);    Uri path = Uri.fromFile(file);    it2.setDataAndType(path, "application/vnd.android.package-archive");    context.startActivityForResult(it2, requestCode);}

在MainActivity中添加protected void onActivityResult(int requestCode, int resultCode, Intent data)處理

protected void onActivityResult(int requestCode, int resultCode, Intent data) {    String strPackageName = null;    if (m_mapInstallApkData != null)        strPackageName = m_mapInstallApkData.remove(requestCode);    //不知道為什麼,不管是否點擊安裝、取消,返回的resultCode都是0,即RESULT_CANCELED,待查    if (resultCode == RESULT_CANCELED) {        if (!TextUtils.isEmpty(strPackageName)) {            //需要重新檢查該packageName是否安裝了            //..做自己的處理        }    }}

註:該程式有瑕疵,就是假如彈出安裝apk的框A和apk框B,點擊B的取消沒有反應,只有在A、B的安裝框都消失(點擊安裝或取消或返回)後才會有返回(分別返回了A和B的結果),解決方案還沒有找到,待

Android 擷取android安裝apk框的安裝狀態(如點擊取消、返回)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.