1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Wifi "startscan()" führt dazu das meine app crasht

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Lonioo, 01.09.2011.

  1. Lonioo, 01.09.2011 #1
    Lonioo

    Lonioo Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    01.09.2011
    hi ich bin ein android noob und versuche das w-lan nach access points zu durchsuchen

    so sieht meine app aus

    my MainActivity:


    Code:
    package com.wifi;
    
    
    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.net.ConnectivityManager;
    import android.net.wifi.WifiManager;
    import android.os.Bundle;
    import android.provider.Settings;
    import android.view.View;
    import android.widget.Toast;
    
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemSelectedListener;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Button;
    import android.widget.ProgressBar;
    
     
    
    public class MainActivity extends Activity 
    {
        public TextView LaTestText;
        private Button BtScanWiFi;
        private Button BtSelectAccessPoint;
        private ProgressBar ProgressBar1;
        public Spinner WiFiChannels;
        
        WifiManager WiFiManager;
        BroadcastReceiver WiFireceiver;
        WiFiReceiver TextReceiver;
         
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            initControls();
            WiFiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            if (WiFireceiver == null)
            	WiFireceiver = new WiFiReceiver(this);
            registerReceiver(WiFireceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        }
           
        @Override
        public void onStop(){
            super.onStop();
            finish();
        }
        
        
        private void initControls()
        {
        	LaTestText = (TextView)findViewById(R.id.LaTestText);
        	BtSelectAccessPoint = (Button)findViewById(R.id.BtSelectAccessPoint);
        	BtScanWiFi = (Button)findViewById(R.id.BtScanWiFi);
        	ProgressBar1 = (ProgressBar)findViewById(R.id.ProgressBar1);
        	WiFiChannels = (Spinner)findViewById(R.id.WiFiChannels);
        	
        	ProgressBar1.setVisibility(ProgressBar.INVISIBLE);
        	
        	BtScanWiFi.setOnClickListener(new Button.OnClickListener() { public void onClick (View v){ ScanWiFi (); }});
        	BtSelectAccessPoint.setOnClickListener(new Button.OnClickListener() { public void onClick (View v){ SelectWiFi (); }});	
        	WiFiChannels.setOnItemSelectedListener(
        			new OnItemSelectedListener()
        			{
        				public void onItemSelected(AdapterView<?> parent,View View, int pos, long id) 
        				{
        					// something
        				}
        				public void onNothingSelected(AdapterView parent) 
        				{
        					// Do nothing.
        				}
        			}
        	);
        	
        }
        
        
    
        
        private void ScanWiFi()
        {
        	ConnectivityManager manager = (ConnectivityManager)getSystemService(MainActivity.CONNECTIVITY_SERVICE);
        	
        	Boolean is3G = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
            Boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
    
            String ConnectionInfo;
    		
            if(is3G)
            {
                ConnectionInfo = "Your current InternetConnectionType is  ''3G'' please set to WiFi !!!";
                Toast.makeText(getApplicationContext(), ConnectionInfo, Toast.LENGTH_LONG).show();
                startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
            }
            else 
            if(isWifi)
            {
            	ConnectionInfo = "Your current InternetConnectionType is  ''WiFi/W-Lan''" ;
                  Toast.makeText(getApplicationContext(), "Scanning for AccessPoints ...", Toast.LENGTH_LONG).show();
                  WiFiManager.startScan();    
                
            	
            }
            else
            {
            	ConnectionInfo = "Your are currently not connectet to WiFi/W-Lan" ;
                
            Toast.makeText(getApplicationContext(), ConnectionInfo, Toast.LENGTH_LONG).show();
                startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
                
            }
            
            
        }
        
        private void SelectWiFi()
        {
    		//
        }
    
          
        }
        
    
    WiFiReceiver.java:

    Code:
    package com.wifi;
    
    import java.util.List;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.wifi.ScanResult;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.Spinner;
    
    
    public class WiFiReceiver extends BroadcastReceiver{
    	private MainActivity mainactivity;
    	public StringBuilder sb;
    	public List<ScanResult> APList;
        public WiFiReceiver(MainActivity mainactivity)
        {
        	super();
        	this.mainactivity = mainactivity;
        }  
        @Override
        public void onReceive(Context c, Intent intent) 
        {     
          APList = mainactivity.WiFiManager.getScanResults();
          for(int i = 0; i < APList.size(); i++)
          {
              sb.append(new Integer(i+1).toString() + ".");
              sb.append(( APList.get(i)).toString());
              sb.append("\\n");
          }
          String info=" "+APList.size();
          Log.i("wifiScan", info);    
          mainactivity.LaTestText.setText(info);
          
        
          
          //mainactivity.LaTestText.setText(sb);
        }
    
        
        
    }

    AndroidManifest:
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.wifi"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="WiFi">
            <activity android:name="MainActivity"
                      android:label="WiFir">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    		<activity android:name="MainListActivity">
    		
            </activity>
        </application>
        <uses-sdk android:minSdkVersion="9" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    </manifest>
    wenn ich nun die app auf meinem GalaxySII ausführe und auf "scann wifi" drücke bekomme ich nach ca. 2-5 sekunden ein fenster "Sorry! The application stopped unexpected." und meine app schließt sich -.-

    wenn ich "startscan()" auskommentire läuft alles wunderbar
    was mache ich falsch ?

    danke das ich eure zeit in anspruch nehmen darf :sneaky:

    (ps: an den coder der seite : mit meinem google chrome (13.0.782.215 m) war bei der registrierung das feld "Benutzername" nicht sichtbar konnte mich also mit chrome nicht hier registrieren erst mit firefox )
     
    Zuletzt bearbeitet: 01.09.2011
  2. swordi, 01.09.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    Eclipse - Logcat ist dein freund
     
  3. Lonioo, 01.09.2011 #3
    Lonioo

    Lonioo Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    01.09.2011
    im emulator funktioniert wlan nicht also kann ich das verhalten meines programms nicht prüfen was soll ich dann also mit logcat ?
     
  4. maniac103, 02.09.2011 #4
    maniac103

    maniac103 Android-Lexikon

    Beiträge:
    1,237
    Erhaltene Danke:
    1,157
    Registriert seit:
    24.01.2011
    Du kannst das Programm auch via Eclipse auf deinem Telefon ausführen. Logcat gibt dir dann die komplette Exception. Geht auch ohne Eclipse via 'adb logcat'.

    Sent from my MB525 using Tapatalk
     
  5. sixi, 02.09.2011 #5
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    In deinem WiFiReceiver wird dir auf jedenfall 'ne Nullpointer um die Ohren fliegen.
    Dein "public StringBuilder sb;" wird nirgendwo initialisiert.

    Zudem wird das "mainactivity.LaTestText.setText(info);" 'nen Problem werden, da du dich mit der "onReceive" Methode nicht im UI-Thread bewegst. In deinem Fall wäre da die runOnUiThread-Methode angebracht :)
     
  6. Lonioo, 02.09.2011 #6
    Lonioo

    Lonioo Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    01.09.2011
    ??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Unable to open log device '/dev/log/main': No such file or directory

    ich nutze aber auch die rom hier
     
  7. sixi, 02.09.2011 #7
    sixi

    sixi Erfahrener Benutzer

    Beiträge:
    237
    Erhaltene Danke:
    64
    Registriert seit:
    20.01.2009
    Hier:
     

Diese Seite empfehlen