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

L

Lonioo

Neues Mitglied
Threadstarter
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:
L

Lonioo

Neues Mitglied
Threadstarter
im emulator funktioniert wlan nicht also kann ich das verhalten meines programms nicht prüfen was soll ich dann also mit logcat ?
 
M

maniac103

Experte
Lonioo schrieb:
im emulator funktioniert wlan nicht also kann ich das verhalten meines programms nicht prüfen was soll ich dann also mit logcat ?
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
 
S

sixi

Fortgeschrittenes Mitglied
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 :)
 
L

Lonioo

Neues Mitglied
Threadstarter
??-?? ??:??:??.???: INFO/<unknown>(<unknown>): Unable to open log device '/dev/log/main': No such file or directory

ich nutze aber auch die rom hier
 
S

sixi

Fortgeschrittenes Mitglied
Hier:
If you are a developer or want to re-enable logcat for whatever reason, do this:

adb shell
su
mount -o remount,rw /system
echo ANDROIDLOGGER >> /system/etc/tweaks.conf
mount -o remount,ro /system

Reboot and you should have it enabled.

Disclaimer: Use at your own risk!
 
Oben Unten