前提・実現したいこと
AndroidOSで、アプリケーション起動時の処理に割り込んでAlertDialogを出したいのですが、ダイアログを出そうとするとエラーでアプリケーション起動時にエラー落ちします。
できればActivityThread.java内にダイアログのコードを書いて実装したいと考えています。
ソースコードがでかいので大元のソースコードのリンクを貼っておきます…該当箇所の関数は5429行目からです。
ActivityThread.java
発生している問題・エラーメッセージ
09-11 15:55:46.797 643 1025 W WindowManager: Attempted to add application window with unknown token null. Aborting. 09-11 15:55:46.798 4971 4971 D AndroidRuntime: Shutting down VM 09-11 15:55:46.798 4971 4971 E AndroidRuntime: FATAL EXCEPTION: main 09-11 15:55:46.798 4971 4971 E AndroidRuntime: Process: (アプリケーションの名前), PID: 4971 09-11 15:55:46.798 4971 4971 E AndroidRuntime: java.lang.RuntimeException: Unable to create application androidx.multidex.MultiDexApplication: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5868) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.app.ActivityThread.-wrap1(Unknown Source:0) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1738) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.os.Looper.loop(Looper.java:164) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6625) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.view.ViewRootImpl.setView(ViewRootImpl.java:765) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.app.Dialog.show(Dialog.java:330) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.app.AlertDialog$Builder.show(AlertDialog.java:1114) 09-11 15:55:46.798 4971 4971 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5831)
該当のソースコード
ActivityThread.java(Android8.1.0_r1)
Java
1/*以下if(applicationName.contains("アプリケーションの名前")){ 2 new AlertDialog.Builder(appContext).setTitle("title").setMessage("Hello").show(); 3 }までが追加した処理です*/ 4 try { 5 String applicationName = ActivityThread.currentProcessName(); 6 Log.d(TAG,"logdayonnappname:"+applicationName); 7 //特定のアプリケーションであればダイアログを表示 8 if(applicationName.contains("アプリケーションの名前")){ 9 new AlertDialog.Builder(appContext).setTitle("title").setMessage("Hello").show(); 10 } 11 mInstrumentation.callApplicationOnCreate(app); 12 } catch (Exception e) { 13 if (!mInstrumentation.onException(app, e)) { 14 throw new RuntimeException( 15 "Unable to create application " + app.getClass().getName() 16 + ": " + e.toString(), e); 17 } 18 } 19 } finally { 20 // If the app targets < O-MR1, or doesn't change the thread policy 21 // during startup, clobber the policy to maintain behavior of b/36951662 22 if (data.appInfo.targetSdkVersion <= Build.VERSION_CODES.O 23 || StrictMode.getThreadPolicy().equals(writesAllowedPolicy)) { 24 StrictMode.setThreadPolicy(savedPolicy); 25 } 26 }
試したこと
appContextに入る場所にActivityThread.thisやmContextなどダイアログの出し方をググってみて出てきたものはだいたい突っ込みましたが「Attempted to add application window with unknown token null. Aborting.」となります…
あなたの回答
tips
プレビュー