Mostrar ProgressDialog en una clase de servicio

Estoy usando un servicio para conectarse a una red usando un AsyncTask. Quiero mostrar un ProgressDialog hasta que la aplicación esté conectada a la red. ¿Pero cómo puedo hacer esto?

Mi servicio se ve así:

package de.bertrandt.bertrandtknx; import tuwien.auto.calimero.link.KNXNetworkLinkIP; import tuwien.auto.calimero.process.ProcessCommunicator; import de.bertrandt.bertrandtknx.Controls.OnOff; import android.app.ProgressDialog; import android.app.Service; import android.content.Intent; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.AsyncTask; import android.os.IBinder; import android.widget.Toast; public class ConnectionService extends Service { public static KNXNetworkLinkIP m_netLinkIp = null; private static ProcessCommunicator m_pc = null; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { //code to execute when the service is first created new Connect().execute(); } @Override public void onDestroy() { //code to execute when the service is shutting down new Disconnect().execute(); } public void onStartCommand(Intent intent, int startid) { //code to execute when the service is starting up } /** * GetIPAddress Async * */ public String getIpAddr() { WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ip = wifiInfo.getIpAddress(); String ipString = String.format( "%d.%d.%d.%d", (ip & 0xff), (ip >> 8 & 0xff), (ip >> 16 & 0xff), (ip >> 24 & 0xff)); return ipString.toString(); } /** * Connect Async * */ private class Connect extends AsyncTask<String, Void, String> { ProgressDialog dialog; boolean ok; @Override protected String doInBackground(String... params) { try { //get local IP address String ipAddress = getIpAddr(); System.out.println("WiFi address is " + ipAddress); m_netLinkIp = Calimero.Util.connect(ipAddress, "192.168.0.2"); if (m_netLinkIp == null){ System.out.println("Can not connect to Demobard"); ok = false; } else{ System.out.println("Connected to Demoboard"); ok = true; } } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { //dialog.dismiss(); Toast.makeText(getApplicationContext(), "Verbindung mit Demoboard " + ((ok == true) ? "hergestellt" : "fehlgeschlagen"), Toast.LENGTH_LONG).show(); if(ok == false){ //show reconnect dialog //reconnect_dialog(); } } @Override protected void onPreExecute() { // Setup Progress Dialog dialog = new ProgressDialog(OnOff.this); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.setMessage("Bitte warten, verbinde mit KNX-Board"); dialog.setIndeterminate(true); dialog.show();*/ } } /** * Disconnect Async * */ private class Disconnect extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { try { Calimero.Util.disconnect(m_netLinkIp); } catch (Exception e) { e.printStackTrace(); } return null; } } } 

Por supuesto, este código hace que los problemas ¿cómo puedo obtener el contexto de la actividad que inicia el servicio?

El Diálogo debe mostrarse en la actividad que inicia el Servicio hasta que la aplicación esté conectada.

Así que un servicio NO es la interfaz de usuario que tienes que usar el patrón de observador. Su actividad tiene que registrar un oyente en el servicio para que el servicio pueda informar a la actividad de eventos especiales (como iniciar la carga o finalizar la carga).

Tienes que añadir siguientes intercae en tu clase de servicio:

  public interface serviceObserver { public void startLoading(); public void stopLoading(); } 

Su actividad tiene que implementar serviceObserver. Su servicio tiene que almacenar una instancia de serviceObserver que se crea en la actividad. Si su servicio está funcionando sin su actividad recomiendo utilizar el receptor de la difusión para la comunicación.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.