关于activityStarting的返回值的问题

时间:2018-02-02 08:34:02

标签: android

今天我正在开发一个可以拦截活动之间启动的应用程序,我的关键代码是:

ActivityManagerNative.getDefault().setActivityController(new InterceptActivityController(), false);

private class InterceptActivityController extends IWeChatActivityController.Stub {

    void InterceptActivityController() {}

    @Override
    public boolean activityStarting(Intent intent, String pkg) { 
        showDialog();
        return false;
    }
}

private void showBottomDialog() {
    Log.d(TAG, "showBottomDialog");
    Dialog bottomDialog = new Dialog(mContext);
    View contentView = LayoutInflater.from(this).inflate(android.R.layout.simple_list_item_2, null);
    bottomDialog.setContentView(contentView);
    ViewGroup.LayoutParams layoutParams = contentView.getLayoutParams();
    layoutParams.width = getResources().getDisplayMetrics().widthPixels;
    contentView.setLayoutParams(layoutParams);        
    bottomDialog.getWindow().setGravity(Gravity.BOTTOM);
    bottomDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);        
    bottomDialog.show();
}

我定义了一个Button,并计划在点击后启动一个Activity。但是现在我拦截了这个动作,只是在activityStarting的函数中显示一个对话框,然后返回false,在关闭这个对话框后,我再次单击该按钮,但没有任何效果,对话框不再显示,谁知道原因?也许我认为这是一个谷歌来源错误,但我不确定。

1 个答案:

答案 0 :(得分:0)

您知道需要及时显示对话框。我的意思是你需要显示多长时间的对话?当你开始显示一个对话框并将其解除时,它没有被摧毁,它只是被解雇了。

请查看下面的代码。我在自己的应用程序中编写了这个,它是安全的。试一试,看看你是否满意:



mButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {



        bottomDialog.show();
        new Thread(new Runnable() {
          @Override
          public void run() {
            try {


              for (int i = 0; i <= 1200; i++) {
                Thread.sleep(100); //The time it takes to update i
                if (i = 1200) {
                  bottomDialog.dismiss();
                }
              }


            } catch (Exception e) {
              e.printStackTrace();
            }
          }
        }).start();

      }
&#13;
&#13;
&#13;

您也可以使用AsyncTask。此外,我将整个事情放在Click Listener中,以显示它是如何使用的。

这个想法是定义一个显示对话时间