问题
I want to display an alert dialog from inside an intent service.
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
This throws the following exception
Unable to add window — token null is not for an application
I have tried IntentService.this and getApplicationContext() as well. Between i dont want to do it using an activity. I just want to show a simple alert dialog with a little text.
回答1:
Need Activity
for display AlertDialog
, because we can't display Dialog
from any Service
Solution.
Create Activity
as Dialog Theme and start that Activity
from Service
.
Just need to register you Activity
in menifest.xml
like as below
android:theme="@android:style/Theme.Dialog"
or
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();
}
}
回答2:
Only if you set your alertDialog type to TYPE_SYSTEM_ALERT
it will be displayed from an intent service.
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
add these after your code:
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.show();
But, it have a cost:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
回答3:
Please visit
https://github.com/selmantayyar/Custom-SMS-Popup
it will surly help you!!
or what you can do is register anActivity in menifest.xml as follows
android:theme="@android:style/Theme.Dialog"
or
android:theme="@android:style/Theme.Translucent.NoTitleBar"
and work around it
回答4:
The problem is because of Context. You can't use this as Context in Intent Service. So need to pass a Context variable of your Intent Service to your Alert Dialog. Like,
AlertDialog alertDialog = new AlertDialog.Builder(context).create();
来源:https://stackoverflow.com/questions/22627184/android-alert-dialog-from-inside-an-intent-service