我正在构建一个DPC(设备策略控制器),我看到的一个问题是Play Store和Play服务正在更新时,Google Contact Sync服务崩溃了 - 留下典型的崩溃对话框屏幕上。由于初始设置过程的部分想法是尽可能少地进行用户交互,如何以编程方式解除此对话框(因为我似乎非常保证会发生这种情况)?
我试过解雇系统对话框......
ctx.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
......但这似乎没有诀窍。
由于这是一个DPC,任何需要设备所有权/管理的东西都可以。
编辑:通常我当时没有屏幕上的用户界面,所以如果有必要请提及。此外,优选地,该解决方案应该至少6.0+,如果不是4.0 +。
答案 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();
}