我想知道是否有人可以判断如何在原生Android屏幕上弹出对话框屏幕?
我目前有一个应用程序可以捕获拨出电话并将其停止,然后我想要弹出一个对话框,该对话框将从拨号程序屏幕上接管并提醒用户已尝试呼叫被阻止并让他们拥有一些对话框中的新选项。
我知道有些人会说我应该使用通知,但我知道这并不是它应该工作的方式,我需要能够在呼叫被困时弹出一个对话框。 / p>
到目前为止,这是我的对话框代码
AlertDialog LDialog = new AlertDialog.Builder(context)
.setTitle("Call Blocked")
.setMessage("Call Blocked, reroute call?")
.setPositiveButton("ok", null).create();
LDialog.show();
我认为我必须以某种方式获得拨号屏幕的上下文?
任何人都可以提供任何帮助和帮助或链接到教程吗?
提前致谢
答案 0 :(得分:59)
对于我的应用程序,我使用了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"
设置Dialog主题。答案 1 :(得分: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);