在Service或者BroadCastReceiver中弹出dialog

时间:2022-11-01 15:28:18

相信搜过这个问题的人都会得到这个答案:

然后在AndroidManifest.xml中加入权限:

<pre code_snippet_id="1856781" snippet_file_name="blog_20160829_3_5500833" name="code" data-original-code="</uses-permission>" data-snippet-id="ext.bb3fc4dc2963427f80f2cb0583a61658" data-snippet-saved="false" data-codota-status="done" style="line-height: 28px; white-space: pre-wrap; color: rgb(102, 102, 102); font-size: 16px; background-color: rgb(255, 255, 255);"><span style="color:#ff0000;"><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"></uses-permission></span> 限:设置成系统权限的dialog,然后显示出来。但是部分机型总是会报错,提示add app not window。总会报错

下面是我的方法:

将Activity设置为dialog来显示。

1.LogOutDialog继承自Activity

2.在清单文件中设置以dialog方式显示

<!-- 窗口化activity的形式 -->
<style name="dialogActivity" parent="@android:style/Theme.NoTitleBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
<activity        android:name=".view.dialog.LogOutDialog"        android:theme="@style/dialogActivity"></activity>

3.在通知中打开

public void onReceive(Context ctx, Intent intent) {
Intent intent = new Intent(ctx,LogOutDialog.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}