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