怎么能方法" getSystemService"直接在BroadcastReceiver中使用?

时间:2015-07-01 01:57:28

标签: java android android-intent android-activity android-broadcast

我遇到了这个问题:getSystemServiceContext类中定义,所以我假设在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();
    }
   }
 }
}

2 个答案:

答案 0 :(得分:8)

getSystemService()Context的一部分。您需要使用Context方法中收到的onReceive()

@Override
public void onReceive(Context context, Intent i) {
    UsbManager manager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
}

答案 1 :(得分:1)

因为NetworkChangeReceiverMainActivity的内部类 您正在使用活动上下文 尝试在新文件(不是子类)中使用NetworkChangeReceiver,您将看到会发生什么。

MainActivity.this虽然它引用了你自己的类,它扩展了Activity类,但基类(Activity)也扩展了Context类,所以它可以用来提供活动上下文。