サービスからダイアログを表示する方法

私はこの話題について本当にたくさんの投稿を読んだことがありますが、私にとっては何も効果がありません(または私が望む効果はありません)。

私はログイン後、バックグラウンドサービス(サービスクラスの実装)を開始するアプリケーションを持っています。このサービスはサーバと同期し、新しい注文が来た場合に通知を作成します。

これまでのところ、すべてがうまくいく、私は通知とトーストのメッセージを持っています。しかし、私は新しい注文についてユーザーに通知するダイアログを持っていたいと思います。

私が理解したように、サービス内からアクティビティーを開始することができます。これはダイアログを表示します。これは機能しますが、アクティビティは現在のアクティビティスタックの先頭から開始され、ダイアログが表示されます。私はビューが添付されていないアクティビティを持っていますが、黒い背景にダイアログを正しく表示します。

私が望むのは、現在のアクティビティにダイアログを表示し、実際の背景(実行中のアクティビティ)を消してダイアログを表示させることです。

これは何とか可能ですか?

ありがとうございました、 フィリップ

42
追加された 著者 araks,

5 答え

システム警告ダイアログの場合にのみ、サービスからのダイアログを表示することができます。したがって、 TYPE_SYSTEM_ALERT ウィンドウレイアウトパラメータをDialogに次のように設定します。

dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

ただし、SYSTEM_ALERT_WINDOW権限が必要です。したがって、マニフェストファイルにこのpermissinを追加することを忘れないでください。


104
追加された
@ chakrapaniこれは魅力のように働いたが、どうすれば私はそれを却下するのですか?私の質問をご覧ください http://stackoverflow.com/questions/21913249/unable-to-dismis‌ s -alertdialog
追加された 著者 Lisa Anne,
あなたは愛らしいです、これは受け入れられた答えでなければなりません
追加された 著者 Muhammed Refaat,
ありがとう、それは私の問題を解決しました。
追加された 著者 mh taqia,
これは受け入れられた答えであってはなりません。アラートダイアログはアラート専用です!例えば、通話やバッテリー状態の変更ダイアログなど、あらゆるものの上に表示されます。 param system_alertを使用している場合は、何をしているのか注意してください。
追加された 著者 JacksOnF1re,
さて、もうこれについて私たちに論じさせてください。あなたが何をしているのか分かっているならば、すべてがうまくいく。たぶん、このサイドノートは十分で、私の反応はちょっと厳しいものでした。
追加された 著者 JacksOnF1re,
@deej私は答えを提供したくありません。しかし、なぜこれが悪い習慣であり、なぜそれが<�正しい>答えであってはならないのかを説明するためには、私はablteでした。そしてそれはコメントの価値があるだけです。
追加された 著者 JacksOnF1re,
@deej悪いプログラマーが欲しいですか?それが悪いプログラマーを得る方法です。 "それ以外は何も問題ありません" - StackOverflowがますますコピー&ペーストコードのサンプルサイトを取得する姿勢です。悲しいですが本当。
追加された 著者 JacksOnF1re,
通常得られない許可が必要であるという事実は、誤用から保護するためにはかなり良い仕事をしなければなりません。これを正当に使用しています。
追加された 著者 Chris Stratton,
@ JacksOnF1reこれは質問に答えて受け入れられた答えであるべきである(SHOULD)。他には何も関係ありません
追加された 著者 deej,
@ JacksOnF1reは同意できません。誰も何かが悪い理由を説明することからあなたを制限する人はいませんが、それは本当に副作用であるべきです。質問に答えて、それが悪い習慣であることを説明してください。現在の回答は回避策を提供します。また、追加のアクセス権が必要ないため、さらに優れています。それでも、私は最初に質問に答える方が良いと信じています。
追加された 著者 deej,
はい、しかし、ダイアログボタンのスタイルも変更されています!
追加された 著者 zionpi,
深刻なことをしよう:これは正しい答えです:-)気高い!
追加された 著者 Yoraco Gonzales,
@ JacksOnF1re場合によっては、実際にはすべての上に警告を表示する必要があります...重要なアラートのような..あなたが開発しているアプリケーションが低メモリモニタサービスのsomekindであり、あなたが何をしているときにメモリが低いときに本当に警告が欲しい..それはまあまあです
追加された 著者 yeahman,
クリス・ストラットンのように言いました...許可は理由のためにそこにあります..
追加された 著者 yeahman,
ありがとう、私のために働いた
追加された 著者 Aayushi,
TYPE_SYSTEM_ALERT この定数は、非システムアプリのAPIレベル26では非推奨です。代わりに、 TYPE_APPLICATION_OVERLAY を使用してください。
追加された 著者 Shady Boshra,

私は非常に、非常に、あなたはこれをやってはいけないことを強くお勧めします(これはAndroidのデザインとUIのガイドラインに反します)。通知は、実行していることを達成するための好ましい方法です(既に達成したかのように聞こえます)。

あなたがそれをしなければならないと言われて、私はDialogのテーマ活動だけを使用することをお勧めします。そうすれば、別のダイアログを起動する必要はありません。 http://developer.android.com/guide/topics/ui/themes.html#をご覧ください。 Apply atheme を参照してください。

40
追加された
これは私がこれまで行ってきたことです。それは実際には方法ですか、例えば通話通知がどのように表示されますか?どんな活動であれ、誰かがあなたに電話をかけたら、電話を受け入れるかどうかを決めるダイアログが表示されます。 DialogThemeを使ったアクティビティでもありますか? (申し訳ありませんが、私はソースでそれを見て怠惰です:)
追加された 著者 Filip Majernik,
これは実際に質問に答えません。
追加された 著者 Vladyslav Matviienko,
答えは、しないでください。あなたがそれをやろうとするなら、ダイアログのように見えるようにテーマ付けされた活動を開始してください。その対話クラスを失敗に終わるようなサービスにしようとしないでください。
追加された 著者 Justin Breitfeller,
通知でボタンを押すことによるアクティビティの開始は問題ありません。しかし、サービスからダイアログを表示することと同じではありません。
追加された 著者 Justin Breitfeller,
私はそれがどのように処理されるのか分かりません。あなたは別のSOの質問をすることを歓迎する以上ですが、私の答えがあなたの問題を解決した場合は、私の解決策の横のチェックボックスをクリックしてそれを受け入れるようにしてください。
追加された 著者 Justin Breitfeller,
このためのユースケース:私はそれに関するアクションを伴う通知を持っています。通常、ユーザーがアクションを選択すると、サービスのバックグラウンドで実行されます。ただし、警告ダイアログが表示されることがあります。
追加された 著者 Mark Gjøl,
新しいアクティビティのダイアログでは、表示されている現在のアクティビティに対してonPause()が呼び出され、そのアクティビティに対してnoHistory = trueの場合、そのアクティビティは破棄されます。これはあなたが望むものではないかもしれません。しかし、再び、それは可能性があります。その行動に気をつけてください。
追加された 著者 JohnyTex,
しかし、AlertDialogを独自のサービスから表示することは技術的に可能ですか?
追加された 著者 Rahul Sundar,

ダイアログ(タイトルバー、透明な背景、「浮動」エフェクトなど)のように見えるアクティビティを作成する方法を学習することから始めて、 そして、いいえ、あなたは単にアクティビティなしでダイアログを開始することはできません

4
追加された
私たちはあなたのようにすべてが良いわけではありません...
追加された 著者 Jmorvan,

ダイアログを表示することはできません。しかし、あなたはカスタマイズされたビューを膨らませることで、特定の条件が満たされたときに画面上にダイアログを表示することができます。

1
追加された

いいえ、「あなたのもの」ではない活動をハイジャックすることはできず、ダイアログを表示するように命じることができます。 あなた自身の活動を始めるあなたのアプローチは古典的なものです。

0
追加された