Problem bzgl. Thread / Service

  • 6 Antworten
  • Letztes Antwortdatum
P

paxis

Fortgeschrittenes Mitglied
0
Hallo Leute,

nachdem mein Projekt vor einigen Wochen schon nicht geklappt hat und ich erstmal weiter "vorne" wieder Android gelernt habe, habe ich mich heute nochmal an meinem Projekt versucht!

Es soll folgendes gemacht werden:

Ich gebe zwei Uhrzeiten an, zwischen denen soll das WLAN (später auch übertragbar auf andere Dienste ^^) ausgeschaltet werden!

Zuerst habe ich nur dafür gesorgt, dass das Wlan ausgeschaltet werden kann!

Jetzt habe ich das ganze in eine Service Thread Klasse ausgelagert, damit das auch im Hintergrund immer schön aktualiesiert und ermittelt, ob er es wieder einschalten soll!

Ärgerlicherweise macht er zur Zeit nichtmal das WLAN aus und da ich nicht ganz so fitt in Thread/Service sachen bin, wollte ich euch mal mein Projekt zeigen und euch um Hilfe bitten:

Main Klasse:
Code:
package de.tobideve.regler;




import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.IBinder;
import android.app.Activity;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Main extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button Wlan = (Button) this.findViewById(R.id.bWlan);
        Wlan.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                int von =getVon() / 3600;
                int bis =getBis() / 3600;
                Toast.makeText(getBaseContext(), "WiFi aus von " + von + "bis" + bis,
                           Toast.LENGTH_LONG).show();
                
                Kontrolle a = new Kontrolle();
                a.onHandleIntent(getIntent());
            }});
                
    }


public int getVon() {
    
    EditText VonT = (EditText) this.findViewById(R.id.edVon);
    String Von = VonT.getText().toString();
    int von = Integer.parseInt(Von.toString());
      int vonM = von * 3600;
return vonM; 
}

public int getBis() {
    EditText BisT = (EditText) this.findViewById(R.id.edBis);
      String Bis = BisT.getText().toString();
      int bis = Integer.parseInt(Bis.toString());
       int bisM = bis * 3600;
      return bisM;
      }

public void WLANaus() {
    long aktuelleZeit = System.currentTimeMillis();
    int von =getVon() *1000;
    int bis =getBis() *1000;
    
   
    if (aktuelleZeit > von){
        
         WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        
                
    
         if(wifi.isWifiEnabled()) { 
              wifi.setWifiEnabled(false);
              Toast.makeText(getBaseContext(), "Wlan Aus",
                       Toast.LENGTH_LONG).show();
              }
              else if (wifi.isWifiEnabled()==false){
                  Toast.makeText(getBaseContext(), "Wlan bereits aus",
                           Toast.LENGTH_LONG).show();  }
    }    
    if (aktuelleZeit < bis){
         WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
         if(wifi.isWifiEnabled()) {
              wifi.setWifiEnabled(false); 
              Toast.makeText(getBaseContext(), "WiFi aus",
                       Toast.LENGTH_LONG).show();
              }
              else if (wifi.isWifiEnabled()==false){
                  Toast.makeText(getBaseContext(), "Wlan bereits aus",
                           Toast.LENGTH_LONG).show();  }
    }
            if (aktuelleZeit > bis){
                 WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                 if(wifi.isWifiEnabled()) {
                      wifi.setWifiEnabled(true); 
                      Toast.makeText(getBaseContext(), "WiFi aus",
                               Toast.LENGTH_LONG).show();
                      }
                      else if (wifi.isWifiEnabled()==false){
                          Toast.makeText(getBaseContext(), "Wlan bereits aus",
                                   Toast.LENGTH_LONG).show();  }
            }
                 if (aktuelleZeit < von){
                        
                     WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                    
                            
                
                     if(wifi.isWifiEnabled()) { 
                          wifi.setWifiEnabled(true);
                          Toast.makeText(getBaseContext(), "Wlan Aus",
                                   Toast.LENGTH_LONG).show();
                          }
                          else if (wifi.isWifiEnabled()==false){
                              Toast.makeText(getBaseContext(), "Wlan bereits aus",
                                       Toast.LENGTH_LONG).show();  }
         }
}
    
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

ThreadKlasse:
Code:
package de.tobideve.regler;

import android.app.IntentService;
import android.app.Service;
import android.content.Intent;
import android.os.HandlerThread;
import android.os.IBinder;




    
public class Kontrolle extends IntentService {

      
      public Kontrolle() {
          super("HelloIntentService");
      }
      public void aufrufen() {
            class Wiederholung extends Thread{
                public void run() {
                     Main a = new Main();
                     a.WLANaus();
                        try{
                            sleep(1000);
                        }
                        catch(InterruptedException e){
                            return;
                        }
                    }
                }    
        }
      

      @Override
      public void onCreate() {
       
      
      }

      
      @Override
      protected void onHandleIntent(Intent intent) {
          aufrufen();   
         
    }}

Zugriff auf WLAN ist in der Manifest Datei gegeben, tritt kein Fehler in der KOnsole auf!
Irgendwo musse in fehler mit der Thread/Service Sache sein und ich hoffe mal auf eure Hilfe :)!

paxis
 
Habe mir deinen Code nicht betrachtet, aber dein Ansatz bringt mich schon zu einer Antwort:
Tu das bitte nicht :D
Erstelle keinen Service, der die ganze Zeit im Hintergrund läuft, nur um abzufragen wie viel Uhr es ist...(Speicher und Akku werden es dir danken)

Genau dafür gibt es den AlarmManager, mit dem ist das auch noch viel einfacher umzusetzen ;)
Gibt es sehr viele Anleitungen und du solltest auch hier im forum fündig werden.

Greets,
Max
 
  • Danke
Reaktionen: paxis
Okay... :)!

Danke dir dann ;)

Werde mich vielleicht eher mal an eine Art textadventure wagen :)!
 
paxis schrieb:
Werde mich vielleicht eher mal an eine Art textadventure wagen :)!

Von der Schwierigkeit her sollte dein obiges Vorhaben absolut machbar sein. ;)
 
Kleiner Tipp:
Code:
if (!wifi.isWifiEnabled())
tut das gleiche, wie
Code:
if (wifi.isWifiEnabled()==false)
und ist kürzer :p
 
myeta schrieb:
Von der Schwierigkeit her sollte dein obiges Vorhaben absolut machbar sein. ;)

naja, mein Problem besteht darin, dass ich nie den Fehler korrigieren kann, wenn ich welche habe! Gibt es da Tricks? Aus der Log Cat werde ich nämlich selten wirklich schlau und immer wieder hier zu fragen ist auch blöde ^^

Vacutainer schrieb:
Kleiner Tipp:
Code:
if (!wifi.isWifiEnabled())
tut das gleiche, wie
Code:
if (wifi.isWifiEnabled()==false)
und ist kürzer :p

Bin ich irgendwie aus der Schule, in der wir mit Delphi programmieren gewöhnt ;)!
 
Gut, dass ich in der Schule nur Java und ein wenig Python hatte ;)

Zu deinem Problem. Wenn ich mir das so ansehe, denke ich, dass das Problem ist, dass deine Werte "von" und "bis" nicht gesichert werden.

Dein Thread ruft ja jede Sekunde eine neue Activity "Main" auf. Dabei werden ja die EditTexts auch jedesmal neu erstellt und sind deswegen leer. Wenn deine Methode "WLANaus" jetzt "getVon" und "getBis" aufruft kommt nicht das zurück, was du am Anfang eingibst und es passiert nichts.
Also speichere wenn dann die von/bis Werte in SharedPreferences oder so ;)
 
Zurück
Oben Unten