2010-01-27 70 views
17

我想知道是否有人可以告訴如何彈出一個對話框屏幕上原生的Android屏幕?Android - 如何在本機屏幕上顯示對話框?

我目前有陷阱撥出電話並停止它的應用程序,那麼我想彈出,將在撥號畫面接管並提醒用戶有試圖調用已被阻止,讓他們有一個對話框對話框中的一些新選項。

我知道有些人會說我應該使用通知,但我意識到這一點,而不是它應該工作的方式,我需要能夠在通話被困時彈出一個對話框。

這是我的對話框代碼到目前爲止

AlertDialog LDialog = new AlertDialog.Builder(context) 
    .setTitle("Call Blocked") 
    .setMessage("Call Blocked, reroute call?") 
    .setPositiveButton("ok", null).create(); 
     LDialog.show(); 

我相信我一定要以某種方式獲取上下文是撥號屏幕?

任何人都可以提供任何幫助和幫助或鏈接到教程嗎?

在此先感謝

回答

56

對於我的應用程序使用的活動與Dialog主題。 您可以在清單文件中聲明的主題:

<activity android:name="PopupActivity" 
    android:launchMode="singleInstance" android:excludeFromRecents="true" 
    android:taskAffinity="" android:theme="@android:style/Theme.Dialog" /> 
  • 使用launcheMode="singleInstance"taskAffinity=""如果您的彈出窗口從主應用程序分離。否則,用戶可以點擊後退按鈕並返回到應用程序的上一個活動。
  • excludeFromRecents="true"避免您的彈出窗口出現在最近的任務中(長按主頁)
  • theme="@android:style/Theme.Dialog"設置對話框主題。
+3

謝謝托馬斯,這是一個很好的解決方案 – 2010-01-27 15:21:21

+0

優秀的解決方案,謝謝!爲我節省了很多時間! – mDroidd 2012-12-15 22:04:21

+0

我真的愛你tbruyelle!添加taskAffinity =「」解決了自從很長時間以來困擾我的問題! – Daksh 2013-02-11 21:49:20

4

如何獲得launchMode = singleTask相當於在代碼

我還沒有看到如何通過編程設置這些標誌明確的解釋,所以我會在這裏包括我的結果。 tldr:你必須設置FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_MULTIPLE_TASK。

如果您直接從您的應用程序啓動此應用程序,您的對話框將顯示在應用程序的最後一個活動之上。但是如果您使用AlarmManager的PendingIntent廣播來啓動您的「對話框」,那麼您有時間切換到另一個應用程序,以便您可以看到「對話框」將顯示在另一個應用程序上,如果該樣式設置得適當以顯示在它後面。

很顯然,人們應該對何時適合在其他應用上顯示對話框負責。

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

// you have to set these flags here where you receive the broadcast 
// NOT in the code where you created your pendingIntent 
    Intent scheduledIntent = new Intent(context, AlertAlarmActivity.class); 
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
    context.startActivity(scheduledIntent); 
相關問題