2017-03-08 27 views
0

私はDPC(デバイスポリシーコントローラ)を構築していますが、PlayストアとPlayサービスの更新中にGoogleコンタクト同期サービスがクラッシュし、一般的なクラッシュダイアログが表示されるスクリーン。初期設定プロセスのアイデアの一部はできるだけユーザーのやりとりをほとんど持たないため、どうすればこのダイアログをプログラム的に却下することができますか?プログラムでクラッシュダイアログを閉じるにはどうすればよいですか?

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

私は、システムのダイアログを却下しようとした

... ...しかし、それはトリックを行うようには見えません。

これはDPCなので、デバイスの所有/管理が必要なものはすべて問題ありません。

編集:通常、私はその時点で画面にUIがないので、必要があればそれを言います。また、好ましくは、4.0 +ではないにしても、少なくとも6.0+で動作することが望ましい。例えば、このような方法でそれをonWindowsFocusChanged行うに

答えて

1

試してみてください。

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

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

私はアプリのクラッシュダイアログについてはよく分からないが、おそらくそれは場合AppErrorDialogが放送ACTION_CLOSE_SYSTEM_DIALOGSにより却下することができ、あなたに

0

をお手伝いしますAndroidバージョンはNです。

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

ただし、電話がロックされているとAppErrorDialogは表示されません。

public boolean canShowErrorDialogs() { 
    return mShowDialogs && !mSleeping && !mShuttingDown 
      && mLockScreenShown != LOCK_SCREEN_SHOWN; 
} // ActivityManagerService 
+0

だから、近い..しかし、悲しいことに、私は、これは、以前のバージョンで作業する必要がある、プラスので、私はいくつかの理由FLAG_DISMISS_KEYGUARDのために(後で私のUIを表示することができますに私は、画面を維持するために必要とFLAG_SHOW_WHEN_LOCKEDを突破するのに十分ではありません少なくとも1つのテストデバイス上のスワイプキーガード)。 – Keilaron

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(); 
    } 
+0

これは、インテントをブロードキャストするのと事実上同じではありませんか?いずれにしても、何もしていないようで、例外はありません。 – Keilaron