android 监听安装页面取消按钮点击事件

ps:安装成功是有广播的,这里只介绍安装界面关闭的监听,曲线可以监听取消按钮(不通过 startActivityForResult())        

      大家都知道通过startActivityForResult()方法唤起系统的安装页面,通过 onActivityResult方法收到安装页面的取消事件。

      但有些场景并不希望通过startActivityForResult()方式来唤起安装页面,例如想在service中唤起,并在service中收到事件的结果。

      例如:要安装A.apk,唤起系统安装界面的时候启动一个计时器,每隔1或者2秒 查询一次 当前App是否在前台,是的话意味着结束了安装界面,再判断本地的packageinfo中是否包含A.apk的相关信息,如果没有就可以认为 是用户取消了安装。

 代码

           

     /**
      * 关于唤起系统安装界面的代码就不贴。。
      * 唤起系统安装界面的同时调用这个方法 启动计时器
      * 回到前台,也就是安装页面消失后发送msg
      */
     private void startInstallTimer(final TaskInfo info) {
         mInstallTimer = new Timer();
         TimerTask timerTask = new TimerTask() {
             @Override
             public void run() {
                 if (isForeground()) {
                     Message message = Message.obtain();
                     message.obj = info;
                     message.what = MSG_WHAT_CANCEL_NOTIFYCATION;  // 結束了安裝,發送到主線程做自己的逻辑  例如判断 本地packageinfo是否有要安装的apk信息,有的话 安装成功,没有就是用户取消了安装或者直接关闭了安装界面
                     mHandler.sendMessage(message);
                 }
             }
         };
         mInstallTimer.schedule(timerTask, 1000, 1000);//
     }
 
     // 停止定时器
     private void stopInstallTimer() {
         if (mInstallTimer != null) {
             mInstallTimer.cancel();
             mInstallTimer = null;
         }
     }
 
     private boolean isForeground() {
         ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
         ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
         String currentPackageName = cn.getPackageName();
         if (!TextUtils.isEmpty(currentPackageName) && currentPackageName.equals(getPackageName())) {
             return true;
         }
         return false;
     }

 

你可能感兴趣的:(android)