Приложение силы закрывается, когда предназначено для отображения диалога - PullRequest
0 голосов
/ 01 февраля 2012

Я пытался использовать 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();
}

buildAlertDialog() вызывается, когда пользователь входит в это действие, и GSP не включен, он вызывается этим фрагментом кода

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 приложения

1 Ответ

1 голос
/ 01 февраля 2012

Может быть проблема со строкой getApplicationContext(), проверьте эту тему

Вы должны передать ссылку Activity на builderAlertDialog(), это будет this, еслиметод вызывается из Activity класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...