活动(主题对话框)在其上的来电屏幕阻塞

Posted

技术标签:

【中文标题】活动(主题对话框)在其上的来电屏幕阻塞【英文标题】:Incoming Call Screen obstruction by an Activity (Theme Dialog) over it 【发布时间】:2017-04-14 08:54:18 【问题描述】:

我试图在来电屏幕上显示一个活动(带有主题对话框)以显示一些信息。我已经完成了,但问题是每当来电时,活动对话框就会弹出它并覆盖 SLIDER(用于接受/拒绝呼叫)。

我希望在来电屏幕上显示活动对话框,但仍希望用户接听/拒绝来电。

我确实使用过这个但现在无法完成活动(对话框)。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

热烈的问候

super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);   

getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
        setContentView(R.layout.notedialog);
        this.setFinishOnTouchOutside(false);
        initializeContent();

        phone_no = getIntent().getExtras().getString("phone_no");
        String note  = getIntent().getExtras().getString("note");

        tv_client.setText(phone_no + " is calling you");
        note_mEditText.setText(note);

        dialog_ok.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                MainActivity.this.finish();
           //        this.setFinishOnTouchOutside(false);
                System.exit(0);
            
        );

【问题讨论】:

你能给我看一些代码吗? 请检查问题先生。 @阿舒 啊这是安卓问题,抱歉我不是安卓开发者:) 没关系,先生。顺便说一句。 所以你的 SLIDER 有一个重叠的活动对话框。你想要的是向右移动它的位置? 【参考方案1】:

不需要带有对话框样式的 Activity。 仅当您要显示对话框时才调用此方法。 这将在您的手机顶部创建一个对话框。

final Dialog dialog;
public void showDialog()
  dialog = new Dialog(this,
            android.R.style.Theme_Translucent_NoTitleBar);

    // Setting dialogview
    Window window = dialog.getWindow();
    window.setGravity(Gravity.TOP);

    window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    dialog.setTitle(null);
    dialog.setContentView(R.layout.notedialog);
    dialog.setCancelable(true);

    dialog.show();
    

若要取消对话,请调用此方法。

public void cancelDialog()
if(dialog!= null )
dialog.dismiss()


如果你坚持使用Activity对话框,你可以使用这个方法来改变窗口的位置。

@Override
public void onAttachedToWindow() 
    super.onAttachedToWindow();

    View view = getWindow().getDecorView();
    WindowManager.LayoutParams lp = (WindowManager.LayoutParams) view.getLayoutParams();
    lp.gravity = Gravity.CENTER | Gravity.TOP
    lp.x = 10;
    lp.y = 10;
    lp.width = 300;
    lp.height = 300;
    getWindowManager().updateViewLayout(view, lp);

【讨论】:

它在 dialog.show(); android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 上崩溃

以上是关于活动(主题对话框)在其上的来电屏幕阻塞的主要内容,如果未能解决你的问题,请参考以下文章

自定义活动主题,默认对话框主题

黑暗活动对话框主题不起作用

将数据传递给 jQuery UI 对话框

Android:如何创建透明的对话框主题活动

如何以编程方式将活动主题化为对话?

如何防止喷气背包组合脚手架在对话框中显示时占据屏幕的整个高度