web-dev-qa-db-ja.com

Androidインテントサービス内からのアラートダイアログ

インテントサービス内からアラートダイアログを表示したい。

   AlertDialog alertDialog = new AlertDialog.Builder(this).create();

これは次の例外をスローします

   Unable to add window — token null is not for an application

IntentService.thisとgetApplicationContext()も試しました。私は活動を使用してそれをしたくありません。小さなテキストで簡単な警告ダイアログを表示したいだけです。

12

どのActivityからでもAlertDialogを表示できないため、表示DialogにはServiceが必要です

ソリューション。

ダイアログテーマとしてActivityを作成し、ActivityからServiceを開始します。

以下のようにmenifest.xmlActivityを登録するだけです

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();
    }
}
23
Niranj Patel

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" />
11
Eliran Kuta

来てください

https://github.com/selmantayyar/Custom-SMS-Popup

それは間違いなくあなたを助けます!!

またはあなたができることは次のようにmenifest.xmlにanActivityを登録することです

Android:theme="@Android:style/Theme.Dialog"

または

Android:theme="@Android:style/Theme.Translucent.NoTitleBar"

それを回避する

0
Jitesh Upadhyay