检测到屏幕叠加

时间:2016-12-05 20:00:22

标签: android android-animation alertdialog android-permissions

我在MyFragmentMyActivityMyFragment包含Dialog,用作权限解释器。我使用AnimatorAlertDialog设置了动画。

我在代码中的位置没有调用Toast或Snackbar或其他任何东西。所以我确信没有toast与android的权限视图进行交互。

public void showPermissionExplainer() {
        final View dialogView = View.inflate(getActivity(), R.layout.dialog_permission_explainer_view, null);

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setView(dialogView);
        final AlertDialog permissionExplainer = builder.create();
        permissionExplainer.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                    revealShow(dialogView, true, null, false);
                else
                    permissionExplainer.dismiss();
            }
        });

        dialogView.findViewById(R.id.btnNo).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                    revealShow(dialogView, false, permissionExplainer, false);
                else
                    permissionExplainer.dismiss();
            }
        });

        dialogView.findViewById(R.id.btnContinue).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                    revealShow(dialogView, false, permissionExplainer, true);
                else
                    permissionExplainer.dismiss();
            }
        });
        if (permissionExplainer.getWindow() != null)
            permissionExplainer.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        permissionExplainer.show();
    }

revealShow()是我在对话框中设置动画并包含onAnimationEnd方法的地方。

接下来我认为动画可能是一个问题,因为对话框稍后会被解雇。因此,我在动画完成后请求许可并查看隐藏和

@Override
public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        dialog.dismiss();
        view.setVisibility(View.INVISIBLE);
        if(askForPermission) {
             final Handler handler = new Handler();
             handler.postDelayed(new Runnable() {
                   @Override
                   public void run() {
                       Log.d(TAG, "run: Running after 1 sec");
                                        requestPermissions(new String[]{Manifest.permission.READ_SMS}, MY_PERMISSIONS_REQUEST_READ_SMS);
                   }
             }, 1000);
       }
}

不幸的是,这也没有解决问题。然后我尝试延迟询问解决问题的权限,但前提是我延迟了至少2-3秒。延迟1秒,我仍然遇到了问题。

我的问题是,如何准确找出导致此行为的原因? 此外,对于片段内的对话框,此行为是否正常?

0 个答案:

没有答案