19

我想知道是否有人可以判断如何在原生 Android 屏幕上弹出对话框屏幕?

我目前有一个应用程序可以捕获拨出呼叫并停止它,然后我想弹出一个对话框,该对话框将从拨号屏幕接管并提醒用户尝试呼叫已被阻止并允许他们有一些新选项对话框。

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

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

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

我想我必须以某种方式让上下文成为拨号器屏幕的上下文?

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

提前致谢

4

2 回答 2

62

对于我的应用程序,我使用了一个带有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"设置对话框主题。
于 2010-01-27T13:52:50.600 回答
5

如何在代码中获得等价的 launchMode = singleTask

我还没有看到关于如何以编程方式设置这些标志的清晰解释,所以我将在此处包含我的结果。tldr:您必须设置 FLAG_ACTIVITY_NEW_TASK 和 FLAG_ACTIVITY_MULTIPLE_TASK。

如果您直接从您的应用程序启动它,您的对话框将出现在您应用程序的最后一个 Activity 之上。但是,如果您使用 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);
于 2013-07-19T19:02:42.700 回答