安卓AlertDialog:TYPE_SYSTEM_ALERT

3

我尝试了我知道和能找到的所有方法,但是我仍然无法使我的警报对话框显示为TYPE_SYSTEM_ALERT。它会在我打开应用程序时显示,但是如果我的应用程序不在前台,则不会弹出。

以下是我的代码:

final AlertDialog.Builder d = new AlertDialog.Builder(this);
d.setTitle("App name");
d.setMessage("Message");
d.setPositiveButton("OK", null);
d.setIcon(R.drawable.ic_launcher);

AlertDialog dialog = d.create();
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
d.show();

然后我在清单文件中有:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

我错过了什么??

在此警报之前的函数流程如下:

  1. 广播接收器监听传入的短信消息。
  2. 一旦接收到,它就使用“RunOnUIThread”将消息传递给MainActivity中的一个函数。
  3. 解析消息并显示警报对话框。现在为什么TYPE_SYSTEM_ALERT无法工作??我可以从logcat中看到消息已经被解析了,但警报对话框仍未显示为系统警报。有人知道原因吗?

你是在Activity还是Service中使用当前代码? - ρяσѕρєя K
我正在从活动中使用它。 - raki
我有一个疑问。操作系统不应该关闭应用程序,原因有两个:1.我将其绑定到前台服务,根据Android生命周期规范,它不应该轻易关闭。2.为了测试目的,还有一个活动唤醒锁。尽管有这些事实,我仍然可以看到onPause和onStop被调用!另一方面,即使应用程序在后台并且“停止”了,它似乎仍然可以很好地处理传入的消息。奇怪... - raki
1个回答

0

所需权限仅适用于系统应用程序:

<permission android:name="android.permission.SYSTEM_ALERT_WINDOW" 
   android:protectionLevel=
   "signature|preinstalled|appop|pre23|development"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接