我遇到了这个问题:getSystemService
在Context
类中定义,所以我假设在context.getSystemService
时调用它。我无法理解以下代码,其中getSystemService
直接在BroadcastReceiver
中调用。我运行代码,没有错误显示!
代码:
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();
}
}
}
}
答案 0 :(得分:8)
getSystemService()
是Context
的一部分。您需要使用Context
方法中收到的onReceive()
:
@Override
public void onReceive(Context context, Intent i) {
UsbManager manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
}
答案 1 :(得分:1)
因为NetworkChangeReceiver
是MainActivity
的内部类
您正在使用活动上下文
尝试在新文件(不是子类)中使用NetworkChangeReceiver,您将看到会发生什么。
MainActivity.this
虽然它引用了你自己的类,它扩展了Activity类,但基类(Activity)也扩展了Context类,所以它可以用来提供活动上下文。