我想在意图服务中显示警告对话框。
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
这会引发以下异常
Unable to add window — token null is not for an application
我也尝试过IntentService.this和getApplicationContext()。之间我不想使用活动。我只是想用一个小文本显示一个简单的警告对话框。
答案 0 :(得分:22)
显示Activity
需要AlertDialog
,因为我们无法显示Dialog
Service
<强>解。强>
创建Activity
作为对话主题,并从Activity
开始Service
。
只需在Activity
注册menifest.xml
,如下所示
android:theme="@android:style/Theme.Dialog"
或
android:theme="@android:style/Theme.Translucent.NoTitleBar"
<强> MyDialog.java 强>
public class MyDialog extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("your title");
alertDialog.setMessage("your message");
alertDialog.setIcon(R.drawable.icon);
alertDialog.show();
}
}
答案 1 :(得分:11)
仅当您将alertDialog类型设置为TYPE_SYSTEM_ALERT
时,它才会从意向服务中显示。
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
在您的代码之后添加以下内容:
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.show();
但是,它有一个成本:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
答案 2 :(得分:0)
请访问
https://github.com/selmantayyar/Custom-SMS-Popup
它会帮助你!!
或者您可以做的是在menifest.xml中注册anActivity,如下所示
android:theme="@android:style/Theme.Dialog"
或
android:theme="@android:style/Theme.Translucent.NoTitleBar"
并解决它
答案 3 :(得分:-2)
问题在于上下文。您不能在意图服务中使用此作为上下文。因此需要将Intent Service的Context变量传递给Alert Dialog。像,
AlertDialog alertDialog = new AlertDialog.Builder(context).create();