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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

要弹出一个对话框,该对话框可以从拨号程序屏幕接管,并提醒用户有试图呼叫已被阻止,并允许他们有一些新的选项对话框。

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

这是我迄今为止的对话框代码:

  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" 设置对话框主题。
用户回答回答于

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

我还没有看到如何以编程方式设置这些标志的明确说明,因此我将在此处包含我的结果。tldr:你必须设置FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_MULTIPLE_TASK。

显然,人们应该对何时适合在其他应用上显示对话负责:

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);

扫码关注云+社区