android:麻烦的对话框

时间:2014-01-27 07:48:05

标签: android gps

如果GPS关闭,我想在启动器活动之前启动应用程序时立即显示带有“ENABLE GPS”和“CANCEL”两个按钮的对话框,否则如果GPS打开,启动器活动就会打开。

boolean isGPSEnabled = false;

         // Declaring a Location Manager
          LocationManager locationManager;

        locationManager = (LocationManager) getApplicationContext()
                        .getSystemService(LOCATION_SERVICE);

                // getting GPS status
                isGPSEnabled = locationManager
                        .isProviderEnabled(LocationManager.GPS_PROVIDER);

        if (!isGPSEnabled ) {
            // no GPS provider is enabled
            //Creating the Dialog box 
            AlertDialog alertDialog = new AlertDialog.Builder(
                    getApplicationContext()).create();
            alertDialog.setTitle("Settings");
            alertDialog.setMessage("Enable GPS for accessing the Application");
            alertDialog.setButton("GPS Settings", new DialogInterface.OnClickListener() {
//          creating Button i.e GPS Setting in the Dialog Box   
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub

                    startActivity(new
                             Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));

                }
            });
            alertDialog.show();
//          creating Button i.e Cancel in the Dialog Box
            alertDialog.setButton("Cancel", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // TODO Auto-generated method stub
//                  Creating another Dialog when "Cancel" is pressed
                AlertDialog whencancelpressed = new AlertDialog.Builder(getApplicationContext()).create();
                whencancelpressed.setTitle("How to use the app");
                whencancelpressed.setMessage("Enter the contacts to whom you want to send the message.Double tap power button in emergency");
                whencancelpressed.setButton("Ok", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // TODO Auto-generated method stub
                    Intent pressedokay = new Intent(getApplicationContext(), MainActivity.class);
                    startActivity(pressedokay);
                    }
                });
                        whencancelpressed.show();   
                }
            });

                } else{
            // GPS provider is enabled
         }

我正在使用此代码在启动器活动之前显示对话框。但是如果gps关闭,应用程序将在启动时强制关闭。请指导我在哪里做错了。

logcat的:

01-27 10:28:01.634: W/IInputConnectionWrapper(331): showStatusIcon on inactive InputConnection
01-27 10:28:16.324: I/data(331): content://com.android.contacts/data/21
01-27 10:28:16.374: I/layoutLinear is not  null(331): not null
01-27 10:28:16.374: I/edittext is not  null(331): not null
01-27 10:28:23.484: W/IInputConnectionWrapper(331): showStatusIcon on inactive InputConnection
01-27 10:28:25.324: I/data(331): content://com.android.contacts/data/1
01-27 10:28:25.354: I/layoutLinear is not  null(331): not null
01-27 10:28:25.364: I/edittext is not  null(331): not null
01-27 10:28:31.914: W/KeyCharacterMap(331): No keyboard for id 0
01-27 10:28:31.914: W/KeyCharacterMap(331): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-27 10:28:37.874: W/IInputConnectionWrapper(331): showStatusIcon on inactive InputConnection
01-27 10:29:25.034: D/dalvikvm(331): GC_EXPLICIT freed 113K, 52% free 2610K/5379K, external 1625K/2137K, paused 54ms
01-27 10:45:24.084: W/KeyCharacterMap(386): No keyboard for id 0
01-27 10:45:24.084: W/KeyCharacterMap(386): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-27 10:45:24.284: W/IInputConnectionWrapper(386): showStatusIcon on inactive InputConnection
01-27 10:49:08.635: W/KeyCharacterMap(439): No keyboard for id 0
01-27 10:49:08.635: W/KeyCharacterMap(439): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-27 10:49:08.824: W/IInputConnectionWrapper(439): showStatusIcon on inactive InputConnection
01-27 11:28:38.884: W/KeyCharacterMap(546): No keyboard for id 0
01-27 11:28:38.884: W/KeyCharacterMap(546): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-27 11:28:39.064: W/IInputConnectionWrapper(546): showStatusIcon on inactive InputConnection
01-27 11:29:15.374: W/IInputConnectionWrapper(546): showStatusIcon on inactive InputConnection
01-27 11:29:37.554: W/IInputConnectionWrapper(546): showStatusIcon on inactive InputConnection
01-27 11:29:38.574: I/data(546): content://com.android.contacts/data/19
01-27 11:29:38.615: I/layoutLinear is not  null(546): not null
01-27 11:29:38.624: I/edittext is not  null(546): not null
01-27 11:35:06.664: W/KeyCharacterMap(645): No keyboard for id 0
01-27 11:35:06.673: W/KeyCharacterMap(645): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-27 11:35:06.764: W/IInputConnectionWrapper(645): showStatusIcon on inactive InputConnection
01-27 11:36:55.563: W/IInputConnectionWrapper(645): showStatusIcon on inactive InputConnection
01-27 11:36:56.523: I/data(645): content://com.android.contacts/data/4
01-27 11:36:56.553: I/layoutLinear is not  null(645): not null
01-27 11:36:56.553: I/edittext is not  null(645): not null
01-27 11:36:59.604: W/IInputConnectionWrapper(645): showStatusIcon on inactive InputConnection
01-27 11:37:00.155: I/data(645): content://com.android.contacts/data/19
01-27 11:37:00.174: I/layoutLinear is not  null(645): not null
01-27 11:37:00.184: I/edittext is not  null(645): not null
01-27 11:37:04.224: W/IInputConnectionWrapper(645): showStatusIcon on inactive InputConnection
01-27 11:38:23.014: D/dalvikvm(645): GC_EXPLICIT freed 116K, 52% free 2596K/5379K, external 1625K/2137K, paused 60ms
01-27 11:43:08.804: W/IInputConnectionWrapper(742): showStatusIcon on inactive InputConnection
01-27 11:45:33.185: D/dalvikvm(775): GC_EXPLICIT freed 56K, 53% free 2579K/5379K, external 1625K/2137K, paused 567ms
01-27 11:48:37.624: W/KeyCharacterMap(842): No keyboard for id 0
01-27 11:48:37.634: W/KeyCharacterMap(842): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-27 12:13:01.034: D/AndroidRuntime(878): Shutting down VM
01-27 12:13:01.034: W/dalvikvm(878): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-27 12:13:01.054: E/AndroidRuntime(878): FATAL EXCEPTION: main
01-27 12:13:01.054: E/AndroidRuntime(878): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.zzz1/com.example.zzz1.MainActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.os.Looper.loop(Looper.java:123)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.app.ActivityThread.main(ActivityThread.java:3683)
01-27 12:13:01.054: E/AndroidRuntime(878):  at java.lang.reflect.Method.invokeNative(Native Method)
01-27 12:13:01.054: E/AndroidRuntime(878):  at java.lang.reflect.Method.invoke(Method.java:507)
01-27 12:13:01.054: E/AndroidRuntime(878):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-27 12:13:01.054: E/AndroidRuntime(878):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-27 12:13:01.054: E/AndroidRuntime(878):  at dalvik.system.NativeStart.main(Native Method)
01-27 12:13:01.054: E/AndroidRuntime(878): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.view.ViewRoot.setView(ViewRoot.java:531)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.app.Dialog.show(Dialog.java:241)
01-27 12:13:01.054: E/AndroidRuntime(878):  at com.example.zzz1.MainActivity.onCreate(MainActivity.java:55)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-27 12:13:01.054: E/AndroidRuntime(878):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-27 12:13:01.054: E/AndroidRuntime(878):  ... 11 more
01-27 12:13:48.094: D/AndroidRuntime(911): Shutting down VM
01-27 12:13:48.094: W/dalvikvm(911): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-27 12:13:48.114: E/AndroidRuntime(911): FATAL EXCEPTION: main
01-27 12:13:48.114: E/AndroidRuntime(911): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.zzz1/com.example.zzz1.MainActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.os.Looper.loop(Looper.java:123)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.app.ActivityThread.main(ActivityThread.java:3683)
01-27 12:13:48.114: E/AndroidRuntime(911):  at java.lang.reflect.Method.invokeNative(Native Method)
01-27 12:13:48.114: E/AndroidRuntime(911):  at java.lang.reflect.Method.invoke(Method.java:507)
01-27 12:13:48.114: E/AndroidRuntime(911):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-27 12:13:48.114: E/AndroidRuntime(911):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-27 12:13:48.114: E/AndroidRuntime(911):  at dalvik.system.NativeStart.main(Native Method)
01-27 12:13:48.114: E/AndroidRuntime(911): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.view.ViewRoot.setView(ViewRoot.java:531)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.app.Dialog.show(Dialog.java:241)
01-27 12:13:48.114: E/AndroidRuntime(911):  at com.example.zzz1.MainActivity.onCreate(MainActivity.java:55)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-27 12:13:48.114: E/AndroidRuntime(911):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-27 12:13:48.114: E/AndroidRuntime(911):  ... 11 more
01-27 12:13:49.704: I/Process(911): Sending signal. PID: 911 SIG: 9
01-27 12:50:22.534: W/IInputConnectionWrapper(946): showStatusIcon on inactive InputConnection
01-27 12:50:23.654: W/IInputConnectionWrapper(946): showStatusIcon on inactive InputConnection
01-27 13:12:17.764: W/KeyCharacterMap(946): No keyboard for id 0
01-27 13:12:17.774: W/KeyCharacterMap(946): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-27 13:12:17.874: W/IInputConnectionWrapper(946): showStatusIcon on inactive InputConnection
01-27 13:12:43.643: D/AndroidRuntime(946): Shutting down VM
01-27 13:12:43.653: W/dalvikvm(946): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-27 13:12:43.664: E/AndroidRuntime(946): FATAL EXCEPTION: main
01-27 13:12:43.664: E/AndroidRuntime(946): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.zzz1/com.example.zzz1.MainActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.os.Looper.loop(Looper.java:123)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.app.ActivityThread.main(ActivityThread.java:3683)
01-27 13:12:43.664: E/AndroidRuntime(946):  at java.lang.reflect.Method.invokeNative(Native Method)
01-27 13:12:43.664: E/AndroidRuntime(946):  at java.lang.reflect.Method.invoke(Method.java:507)
01-27 13:12:43.664: E/AndroidRuntime(946):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-27 13:12:43.664: E/AndroidRuntime(946):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-27 13:12:43.664: E/AndroidRuntime(946):  at dalvik.system.NativeStart.main(Native Method)
01-27 13:12:43.664: E/AndroidRuntime(946): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.view.ViewRoot.setView(ViewRoot.java:531)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.app.Dialog.show(Dialog.java:241)
01-27 13:12:43.664: E/AndroidRuntime(946):  at com.example.zzz1.MainActivity.onCreate(MainActivity.java:70)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-27 13:12:43.664: E/AndroidRuntime(946):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-27 13:12:43.664: E/AndroidRuntime(946):  ... 11 more
01-27 13:19:32.354: D/AndroidRuntime(1001): Shutting down VM
01-27 13:19:32.354: W/dalvikvm(1001): threadid=1: thread exiting with uncaught exception (group=0x40015560)
01-27 13:19:32.374: E/AndroidRuntime(1001): FATAL EXCEPTION: main
01-27 13:19:32.374: E/AndroidRuntime(1001): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.zzz1/com.example.zzz1.MainActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.os.Looper.loop(Looper.java:123)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.app.ActivityThread.main(ActivityThread.java:3683)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at java.lang.reflect.Method.invokeNative(Native Method)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at java.lang.reflect.Method.invoke(Method.java:507)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at dalvik.system.NativeStart.main(Native Method)
01-27 13:19:32.374: E/AndroidRuntime(1001): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.view.ViewRoot.setView(ViewRoot.java:531)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.app.Dialog.show(Dialog.java:241)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at com.example.zzz1.MainActivity.onCreate(MainActivity.java:70)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-27 13:19:32.374: E/AndroidRuntime(1001):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
01-27 13:19:32.374: E/AndroidRuntime(1001):     ... 11 more

1 个答案:

答案 0 :(得分:2)

这将解决问题:

AlertDialog alertDialog = new AlertDialog.Builder(
                    Yourclassname.this).create();

基本上,当您使用Dialog时,它们仅限于特定活动,而不是任何给定活动之外的Toasts。遵循这一逻辑,而不是通过BuildergetApplicationContext()提供您的活动的上下文 - 暗示上下文可以是任何活动,指出对话框绑定的确切活动。

希望解释清楚。

由于API存在问题,抱歉我不记得,setPositiveButtonsetNegativeButtonsetNeutralButton用于设置对话框的按钮。

例如

alertDialog.setPositiveButton(...)

这些方法只会对声明的按钮的位置产生影响。

相关问题