我试图通过使用从服务启动复选框对话框AlertDialog.Builder但我收到以下错误:
我没有启动对话框时出现此错误builder.getWindow().setType():
05-28 10:48:42.816: E/AndroidRuntime(18510): FATAL EXCEPTION: main
05-28 10:48:42.816: E/AndroidRuntime(18510): Process: com.bustracker, PID: 18510
05-28 10:48:42.816: E/AndroidRuntime(18510): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
05-28 10:48:42.816: E/AndroidRuntime(18510): at android.view.ViewRootImpl.setView(ViewRootImpl.java:691)
05-28 10:48:42.816: E/AndroidRuntime(18510): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:288)
05-28 10:48:42.816: E/AndroidRuntime(18510): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
05-28 10:48:42.816: E/AndroidRuntime(18510): at android.app.Dialog.show(Dialog.java:312)
05-28 10:48:42.816: E/AndroidRuntime(18510): at android.app.AlertDialog$Builder.show(AlertDialog.java:991)
05-28 10:48:42.816: E/AndroidRuntime(18510): at com.bustracker.TrackingService.stop_popup(TrackingService.java:370)
05-28 10:48:42.816: E/AndroidRuntime(18510): at com.bustracker.TrackingService.onAsyncTaskFinished(TrackingService.java:305)
Run Code Online (Sandbox Code Playgroud)
我试着用它来舔它 builder.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
但是我收到了这个错误:
方法getWindow()未定义类型
private void stop_popup(final ArrayList<Integer> routeList) {
int routeListSize = routeList.size();
if (routeListSize > 0) {
String[] charSequence = new String[routeList.size()];
for (int i = 0; i < routeList.size(); i++) {
charSequence[i] = String.valueOf(routeList.get(i));
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Has this route arrived the stop? ");
builder.setMultiChoiceItems(charSequence, null,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
if (isChecked) {
route_number = routeList.get(which);
}
}
});
builder.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
});
builder.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
});
builder.create();
builder.show();
}
}
Run Code Online (Sandbox Code Playgroud)
Kar*_*eek 12
如果要在Android中弹出对话框Service,有两种方法:
使用ActivityasDialog
使用AlertDialog.Builder,但您需要使用配置对话框作为系统警报dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
以下是示例代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Test dialog"));
builder.setIcon(R.drawable.icon);
builder.setMessage("Content");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//Do something
dialog.dismiss();
});
builder.setNegativeButton("Close", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alert.show();
Run Code Online (Sandbox Code Playgroud)
另外,请记住在AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5719 次 |
| 最近记录: |