如何以编程方式关闭崩溃对话框?

时间:2017-03-08 22:35:50

标签: android mdm

我正在构建一个DPC(设备策略控制器),我看到的一个问题是Play Store和Play服务正在更新时,Google Contact Sync服务崩溃了 - 留下典型的崩溃对话框屏幕上。由于初始设置过程的部分想法是尽可能少地进行用户交互,如何以编程方式解除此对话框(因为我似乎非常保证会发生这种情况)?

我试过解雇系统对话框......

ctx.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));

......但这似乎没有诀窍。

由于这是一个DPC,任何需要设备所有权/管理的东西都可以。

编辑:通常我当时没有屏幕上的用户界面,所以如果有必要请提及。此外,优选地,该解决方案应该至少6.0+,如果不是4.0 +。

3 个答案:

答案 0 :(得分:1)

尝试在像这样的WindowsFocusChanged方法上执行此操作,例如:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        if (!hasFocus) {
            Intent ctx= new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
            sendBroadcast(ctx);
        }
    }

我不确定应用程序崩溃对话框,但也许它会帮助你

答案 1 :(得分:0)

如果Android版本为N,则可以通过广播ACTION_CLOSE_SYSTEM_DIALOGS来解除AppErrorDialog。

display: grid

但是,如果手机被锁定,AppErrorDialog将无法显示。

ctx.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));

答案 2 :(得分:0)

请尝试此代码。

    try {

        Class ActivityManagerNative = Class.forName("android.app.ActivityManagerNative");
        Class IActivityManager = Class.forName("android.app.IActivityManager");

        Method getDefault =  ActivityManagerNative.getMethod("getDefault", null);
        Object am = IActivityManager.cast(getDefault.invoke(ActivityManagerNative, null));

        Method closeSystemDialogs =  am.getClass().getMethod("closeSystemDialogs", String.class);
        closeSystemDialogs.invoke(am, "DPC close");

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }