【问题标题】:Can't turn-on WiFi by a class object无法通过类对象打开 WiFi
【发布时间】:2016-10-18 16:49:21
【问题描述】:

我知道我可以通过 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,所有必要的导入都已经完成

【问题讨论】:

  • 您确定您拥有CHANGE_WIFI_STATE 权限集吗?我确定ACCESS_WIFI_STATE 也是必需的。
  • @RayfenWindspear 是的,我做到了。
  • 我不确定这些是否也是必需的。我自己从未使用过它们。 ACCESS_NETWORK_STATECHANGE_NETWORK_STATE
  • @RayfenWindspear 都是必须的,但是为什么我不能使用公共类的方法来开启WiFi呢?
  • 也许看到这个问题。在答案 cmets 中,还有一个带有源代码的教程。 stackoverflow.com/questions/3930990/…

标签: java android inheritance android-wifi wifimanager


【解决方案1】:

我找到了解决方案。我通过 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,所有必要的导入都已经完成

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多