Android - 如何在本机屏幕上显示对话框?

问题描述:

我想知道是否有人可以告诉如何弹出一个对话框屏幕上原生的Android屏幕?Android - 如何在本机屏幕上显示对话框?

我目前有陷阱拨出电话并停止它的应用程序,那么我想弹出,将在拨号画面接管并提醒用户有试图调用已被阻止,让他们有一个对话框对话框中的一些新选项。

我知道有些人会说我应该使用通知,但我意识到这一点,而不是它应该工作的方式,我需要能够在通话被困时弹出一个对话框。

这是我的对话框代码到目前为止

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

我相信我一定要以某种方式获取上下文是拨号屏幕?

任何人都可以提供任何帮助和帮助或链接到教程吗?

在此先感谢

对于我的应用程序使用的活动与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

如何获得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);