Java “方法”是如何实现的;getSystemService";是否直接用于广播接收机?
我遇到了这个问题:Java “方法”是如何实现的;getSystemService";是否直接用于广播接收机?,java,android,android-intent,android-activity,android-broadcast,Java,Android,Android Intent,Android Activity,Android Broadcast,我遇到了这个问题:getSystemService在Context类中定义,所以我假设在Context.getSystemService时调用它。我无法理解以下代码,其中在BroadcastReceiver中直接调用了getSystemService。我运行代码,没有错误显示 代码: public class MainActivity extends Activity { …… class NetworkChangeReceiver extends BroadcastReceiver
getSystemService
在Context
类中定义,所以我假设在Context.getSystemService
时调用它。我无法理解以下代码,其中在BroadcastReceiver
中直接调用了getSystemService
。我运行代码,没有错误显示
代码:
public class MainActivity extends Activity {
……
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectionManager = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable())
{
Toast.makeText(context, "network is available",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "network is unavailable",
Toast.LENGTH_SHORT).show();
}
}
}
}
因为您的
networkchangerecever
是MainActivity
的一个内部类您正在使用活动上下文。
尝试在新文件(不是子类)中使用NetworkChangeReceiver,您将看到发生了什么
MainActivity。此
虽然指的是您自己的类,它扩展了Activity类,但基类(Activity)也扩展了Context类,因此它可以用于提供Activity上下文。getSystemService()
是上下文的一部分。您需要使用在onReceive()
方法中接收的Context
:
@Override
public void onReceive(Context context, Intent i) {
UsbManager manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
}
在本例中,在BroadcastReceiver(内部类)中调用getSystemService。因此,默认情况下,getSystemService表示this.getSystemService。“这”不是指网络接收器吗?我对“上下文”有点困惑,对不起that@SamuelChan将networkchangerecever
更改为static
类,您将看到。。。