I trying to execute the following code… but the AlertDialog is creating problems! Without that the code works fine. I want a dialogbox to pop up and ask the user to enable GPS when its turned off!
public class Testing extends Service {
private Location loc;
private Dialog dialog;
String DATA;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate()
{
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId)
{
LocationManager LM = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if (!LM.isProviderEnabled(LocationManager.GPS_PROVIDER)){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Your GPS is disabled! Would you like to enable it?")
.setCancelable(false).setPositiveButton("Enable GPS",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(gpsOptionsIntent);
}
});
builder.setNegativeButton("Do nothing",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
LocationListener LL = new MyLocationListener();
LM.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, LL);
LM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, LL);
/*//Runnable to determine when the first GPS fix was received.
Runnable showWaitDialog = new Runnable() {
@Override
public void run() {
while (loc == null) {
// Wait for first GPS Fix (do nothing until loc != null)
}
// After receiving first GPS Fix dismiss the Progress Dialog
dialog.dismiss();
}
};
// Create a Dialog to let the User know that we're waiting for a GPS Fix
dialog = ProgressDialog.show(getApplicationContext(), "Please wait...","Retrieving GPS data ...", true);
Thread t = new Thread(showWaitDialog);
t.start();*/
LM.addNmeaListener(new NmeaListener() {
public void onNmeaReceived(long timestamp, String nmea)
{
DATA = nmea;
}});
}
But I am getting this error! The ProgressDialog code within the comment lines also throws the same error!
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): FATAL EXCEPTION: main
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): java.lang.RuntimeException: Unable to start service Firstdroid.Gps.Testing@462a35d0 with Intent { cmp=Firstdroid.Gps/.Testing }: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3282)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.app.ActivityThread.access$3600(ActivityThread.java:135)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2211)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.os.Handler.dispatchMessage(Handler.java:99)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.os.Looper.loop(Looper.java:144)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.app.ActivityThread.main(ActivityThread.java:4937)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at java.lang.reflect.Method.invokeNative(Native Method)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at java.lang.reflect.Method.invoke(Method.java:521)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at dalvik.system.NativeStart.main(Native Method)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.view.ViewRoot.setView(ViewRoot.java:513)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.app.Dialog.show(Dialog.java:241)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at Firstdroid.Gps.UrbanExplorer.onStart(UrbanExplorer.java:84)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.app.Service.onStartCommand(Service.java:420)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3267)
08-04 04:36:09.664: ERROR/AndroidRuntime(6301): ... 10 more
It is not possible to show a dialog from a
Service(as opposed toActivity).Excerpt from
Dialogdocumentation found hereIn fact, showing a dialog from a
Serviceviolates the Android UI guidelines. The guidelines recommend using notifications instead.If you really need to, you can launch an
Activitythat looks and behaves like aDialog, which is described here, but still ill-advised as you may be interrupting the user while he/she is in the middle of another activity.