如何在我自己的类中使用android函数?

时间:2014-06-14 16:40:25

标签: android sdk android-activity

现在程序正常,

此程序可以打开/关闭wifi

现在我想把这个函数放到库中,并简化活动类中的代码

public class MyActivity extends Activity {

    private WifiManager wifiManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);

        Button bWifi = (Button) findViewById(R.id.button);
        bWifi.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View view) {

                if (!wifiManager.isWifiEnabled())
                {
                    wifiManager.setWifiEnabled(true);
                }
                else
                {
                    wifiManager.setWifiEnabled(false);
                }
                Toast.makeText(getApplicationContext(), "Toggle wifi", Toast.LENGTH_LONG).show();
            }
        });

    }
}

然后我改为这个。更改后,我无法运行应用程序,如何在其他类中调用android函数?

public class MyActivity extends Activity {

    Setting setting=new Setting();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button bWifi = (Button) findViewById(R.id.button);
        bWifi.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View view) {

                setting.toggleWifi();
            }
        });

}

设置课程:

public class Setting extends Activity {
    private WifiManager wifiManager;

    public Setting()
    {

        wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
    }


    public void toggleWifi()
    {
        if (!wifiManager.isWifiEnabled())
        {
            wifiManager.setWifiEnabled(true);
        }
        else
        {
            wifiManager.setWifiEnabled(false);
        }
        Toast.makeText(getApplicationContext(), "Toggle Wifi", Toast.LENGTH_LONG).show();
    }
}

这是第二个版本,在此版本中,只有一个活动。它可以准确地向您显示问题。如果我删除此行

,此版本仍无效
    wifiManager = (WifiManager) (this.activity.getSystemService(Context.WIFI_SERVICE));

该应用程序将有效。

public class MyActivity extends Activity {

    Setting setting=new Setting(this);

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button bWifi = (Button) findViewById(R.id.button);
        bWifi.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View view) {

            }
        });

    }
}



public class Setting {
    private WifiManager wifiManager;
    private Activity activity;

    public Setting(Activity activity)
    {
        this.activity=activity;
        wifiManager = (WifiManager) (this.activity.getSystemService(Context.WIFI_SERVICE));
    }

}

1 个答案:

答案 0 :(得分:1)

为什么你的助手类设置扩展活动?我相信你这样做只是为了得到Context的一个实例,以便你可以拨打getSystemService()。 Activity是一个具有自己生命周期的UI组件。你不应该将它用作实用程序/助手类。

您可以从Activity将上下文传递给设置对象,而不是创建活动,并使用该上下文调用getSystemService()。

 public void toggleWifi(Context mContext)
{   WifiManager wifiManager = = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
    if (!wifiManager.isWifiEnabled())
    {
        wifiManager.setWifiEnabled(true);
    }
    else
    {
        wifiManager.setWifiEnabled(false);
    }
    Toast.makeText(getApplicationContext(), "Toggle Wifi", Toast.LENGTH_LONG).show();
}

现在,您可以从Activity

调用此方法
   setting.toggleWifi(MyActivity.this);

注意:当您将Context传递给帮助程序类时,请确保不要超过所需的时间。或者为了使其简单,不要持有比Context更长的Context。