我一直在尝试使用AlertDialog
在用户未启用GPS时打开,并使用意图将其定向到Settings.ACIOTN_LOCATION_SOURCE_SETTINGS
。
private void buildAlertDialog()
{
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
builder.setMessage("Gps is disabled, do you want to enable it?");
builder.setCancelable(false);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id)
{
// TODO Auto-generated method stub
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// TODO Auto-generated method stub
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
当用户输入此活动并且未启用GSP时,会调用buildAlertDialog()
,此代码段会调用此代码
mLocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(!mLocManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
buildAlertDialog();
}
mLocListener = new LocListener();
mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocListener);
错误的Logcat输出如下
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fyp.run_race/com.fyp.run_race.Begin_Run}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2781)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2797)
at android.app.ActivityThread.access$2300(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4914)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:513)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:241)
at com.fyp.run_race.Begin_Run.buildAlertDialog(Begin_Run.java:133)
at com.fyp.run_race.Begin_Run.onCreate(Begin_Run.java:82)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1065)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745)
... 11 more
我认为可能是新活动未在应用程序的android清单文件中注册
答案 0 :(得分:1)
getApplicationContext()
行可能存在问题,请检查this thread
如果从Activity
类调用该方法,您应该将builderAlertDialog()
引用传递给this
Activity
。