インテントサービス内からアラートダイアログを表示したい。
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
これは次の例外をスローします
Unable to add window — token null is not for an application
IntentService.thisとgetApplicationContext()も試しました。私は活動を使用してそれをしたくありません。小さなテキストで簡単な警告ダイアログを表示したいだけです。
どのActivity
からでもAlertDialog
を表示できないため、表示Dialog
にはService
が必要です
ソリューション。
ダイアログテーマとしてActivity
を作成し、Activity
からService
を開始します。
以下のようにmenifest.xml
にActivity
を登録するだけです
Android:theme="@Android:style/Theme.Dialog"
または
Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
MyDialog.Java
public class MyDialog extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("your title");
alertDialog.setMessage("your message");
alertDialog.setIcon(R.drawable.icon);
alertDialog.show();
}
}
AlertDialogタイプをTYPE_SYSTEM_ALERT
に設定した場合のみ、インテントサービスから表示されます。
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
これらをコードの後に追加します。
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.show();
ただし、それにはコストがかかります。
<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW" />
来てください
https://github.com/selmantayyar/Custom-SMS-Popup
それは間違いなくあなたを助けます!!
またはあなたができることは次のようにmenifest.xmlにanActivityを登録することです
Android:theme="@Android:style/Theme.Dialog"
または
Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
それを回避する