如何从第二个 .java class 文件获取 getSystemService 以在 Android Studio 中工作?

How do I get getSystemService from a second .java class file to work in Android Studio?

我很抱歉。我知道有很多这样的重复问题,但即使在这里通读了这些问题,我也无法正常工作或正确理解答案。由于需要重复点,我无法评论另一个 post 来帮助解释答案。


所以我在 JavaScript 方面很有经验,但我仍然是 Java 和学习的初学者。不久前,我在 BlueJ 上用 Java 进行了一些练习。

所以最近我开始使用 Android Studio with the help of Building Your First App 指南开发应用程序,我在遵循、学习和理解方面没有任何问题。

现在我正在开发自己的应用程序。当我试图通过 答案将它们存储在第二个 .java 文件中来整理我找到的代码片段时,我一直遇到问题。

我尽量缩短代码以在此处显示。

Net.java

package com.nova.netmanager;

import android.content.Context;
import android.net.wifi.WifiManager;

class Net {
    public boolean isWifiEnabled() {
        WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        return wifi.isWifiEnabled();
    }
}

MainActivity.java

package com.nova.netmanager;

import android.content.Context;
import android.net.wifi.WifiManager;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.Switch;

public class MainActivity extends AppCompatActivity {
    Switch wifiSwitch;
    WifiManager wifi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        wifiSwitch = (Switch) findViewById(R.id.switch_wifi);
        wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        checkNetworkStatus();

        wifiSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                wifi.setWifiEnabled(isChecked);
            }
        });
    }

    @Override
    protected void onResume() {
         super.onResume();

         checkNetworkStatus();
    }

    public void checkNetworkStatus() {
        Net net = new Net();
        wifiSwitch.setChecked(net.isWifiEnabled());
    }
}

Net.java 是我自己的 class 我正在尝试将所有通信和网络内容存储在一起,例如检查状态和切换它们。现在我的应用程序不断崩溃,调试器在缩小范围后不断抱怨 Net.java 中的这一行。

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

我试过将 extends AppCompatActivity 添加到 class Net,但提出了一些问题,说它应该在 onCreate 之后 运行,这是我看到的脚本流逻辑所做的。我什至尝试过 class 不存在的 getActivity() 并且我尝试使用其他答案中的 Context

WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

我不明白为什么在第二个脚本中询问 Android WiFi 是打开还是关闭如此困难。我想我已经读过 Android Studio 应该很容易,即使以前没有人编码过。

如有任何帮助,我们将不胜感激。很抱歉 post 和可能的重复。

您需要按如下方式传递context

class Net { 
    public boolean isWifiEnabled(Context context) { 
        WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        return wifi.isWifiEnabled();
    } 
}

并在您的 activity 中使用它:-

public class MainActivity extends AppCompatActivity { 
    Switch wifiSwitch;
    WifiManager wifi;

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        wifiSwitch = (Switch) findViewById(R.id.switch_wifi);
        wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        checkNetworkStatus(); 

        wifiSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override 
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                wifi.setWifiEnabled(isChecked);
            } 
        }); 
    } 

    @Override 
    protected void onResume() { 
         super.onResume(); 

         checkNetworkStatus(); 
    } 

    public void checkNetworkStatus() { 
        Net net = new Net();
        wifiSwitch.setChecked(net.isWifiEnabled(MainActivity.this));
    } 
}

编辑:您还需要在AndroidManifest文件中添加以下权限

<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" />