Zeigen ProgressDialog in einer Service-Klasse

Ich bin mit einem Dienst zu verbinden, um eine Netzwerkverbindung über einen AsyncTask. Ich will zeigen, einen ProgressDialog, bis die app mit dem Netzwerk verbunden ist. Aber wie kann ich dies tun?

Mein Service sieht so aus:

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;
          }      

    }

}

Natürlich dieser code Probleme macht, wie bekomme ich den Kontext der Aktivität, die den Dienst gestartet?

Dialog angezeigt werden soll, in die Tätigkeit, die den Dienst gestartet, bis die app verbunden ist.

  • Sie kann nicht, muss ein Dialog gestartet werden, aus der sich eine Aktivität.
  • Ich würde anfangen, die DialogActivity als NEW_TASK, mit einem singleTask-Modus und mit onNewIntent zu fangen Wert aktualisiert
  • ok, aber wenn ich den dialog innerhalb der Aktivität selbst, wie kann ich wissen, ob die Verbindung hergestellt ist? Muss ich eine Handler?
  • ich würde eine dialog-Aktivität mit der Absicht angibt, dass die Verbindung aufzubauen, dann senden Sie beabsichtigt, diese Tätigkeit (Aufruf von startActivity, die singleTask-Aktivität empfängt Anrufe zu onNewIntent.)
InformationsquelleAutor Mokkapps | 2012-11-12
Schreibe einen Kommentar