任何应用程序中的弹出窗口

7
我想在任何应用程序中的特定时间弹出对话框,我的代码如下:
 public class testPOPDialog extends Activity {
/** Called when the activity is first created. */
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    mHandler.postDelayed(mUpdateTimeTask, 1000);



}
private Runnable mUpdateTimeTask = new Runnable() {
       public void run() {
           AlertDialog d = new AlertDialog.Builder(testPOPDialog.this)
            .setTitle("tanchulai")
            .setMessage("bucuo de tanchulai")

            .create();

        d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
        d.show();     
       }
    };

}

IT技术与我息息相关

12-03 10:12:18.162: ERROR/AndroidRuntime(571): android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRoot$W@43dd71c0 -- permission denied for this window type

这个权限是什么意思?如果我删除 d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);,我的应用程序会正常运行……

3个回答

14

将此权限添加到您的清单中:

android.permission.SYSTEM_ALERT_WINDOW

我已经添加了权限并使用了完全相同的代码。它能够在应用程序内显示对话框,但是如果我转到主屏幕或其他应用程序,则不会显示在屏幕上(返回应用程序后,我可以看到弹出窗口)。缺少什么? - Bruce
我通过使用 getApplicationContext() 替换 Topic owner 代码中的 testPOPDialog.this,使其正常工作... 不知道为什么。 - Bruce
答案不适用于Marshmallow及以上版本 - Lavekush Agrawal

1

首先感谢 Mathias Lin

我是 Android 新手,所以很难像 Mathias Lin 的回答那样知道如何设置权限。 因为我不知道如何在清单文件中设置权限。

最终,在 Mathias Lin 的帮助下,我成功设置了权限。所以我详细阐述了这个答案。


在清单文件中使用:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

之后

<uses-sdk
    android:minSdkVersion=...
    android:targetSdkVersion=... />

as

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

0

在您的清单文件中尝试使用此代码,与您想要显示为弹出窗口的活动一起。-->>

android:theme="@android:style/Theme.Dialog"

谢谢您的回答,我的问题是想要弹出对话框,无论正在运行什么程序,比如一个时钟应用程序。当特定时间到来时,它可以弹出一个对话框。 - pengwang

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