无法通过类对象打开WiFi

问题描述 投票:0回答:1

我知道我可以通过 WifiManager 对象在 OnCreate() 中打开 WiFi。但我的项目需要一种面向对象的方法,而不是简单地使用 WiFi 功能。所以我做了一个课:

public class WiFiSenderBase extends Activity implements Sender
{  
    public static WifiManager wifi;
    
    WiFiSenderBase()
    {
        wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    }
            
    @Override
    public boolean TurnOn()
    {
        if(!wifi.isWifiEnabled())
        {
            wifi.setWifiEnabled(true);
            return true;
        }
        return false;
    }
}

现在在 MainActivity 类和 onCreate() 中:

public class MainActivity extends Activity
{
    ToggleButton t;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        t = (Button)findViewById(R.id.Button1_ref);
        final WiFiSenderBase wifi = new WiFiSenderBase();
        t.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v) 
                {
                    wifi.TurnOn();
                }
            });
    }
}

现在,问题是应用程序在 onCreate() 本身崩溃并进行吐司

不幸的是,应用程序已停止

我认为在MainActivity中实例化WiFiSenderBase类存在问题,因为WiFiSenderBase也扩展了Activity类,但是如果我不在WiFiSenderBase中扩展Activity,那么我就无法使用getSystemService()

附注使用 Eclipse mars,并且所有必要的导入都已完成

java android inheritance android-wifi wifimanager
1个回答
0
投票

我找到了解决方案。我通过 WifiManager 对象在 OnCreate() 中打开 WiFi。并将其传递给 WiFiSenderBase 的构造函数。:

public class WiFiSenderBase implements Sender
{  
    public static WifiManager wifi;

    WiFiSenderBase(WifiManager man)
    {
        wifi = man;
    }

    @Override
    public boolean TurnOn()
    {
        if(!wifi.isWifiEnabled())
        {
            wifi.setWifiEnabled(true);
            return true;
        }
        return false;
    }
}

现在在 MainActivity 类和 onCreate() 中:

public class MainActivity extends Activity
{
    public WifiManager wifiman;
    ToggleButton t;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wifiman = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        final WiFiSenderBase wifi = new WiFiSenderBase(wifiman);
        t = (ToggleButton)findViewById(R.id.toggleButton1_ref);
        t.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v) 
                {
                    wifi.TurnOn();
                }
            });
    }
}

现在问题解决了。

附注使用 eclipse mars,并且所有必要的导入都已完成

© www.soinside.com 2019 - 2024. All rights reserved.