如何在android上网络状态更改实时图像?

时间:2016-03-02 07:50:11

标签: android

我希望实时显示网络状态

例如:最近网络状态是以太网连接,我想显示以太网图像。 屏幕不会更改,如果网络连接已更改,则应更改。

我认为创建接收器类。但是改变网络,app就停止了。

MainActivity

public class MainActivity extends ActionBarActivity {

  ImageView ethernet;

  ImageView unableNetwork;

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

    ethernet = (ImageView) findViewById(R.id.imageView2);
    unableNetwork = (ImageView) findViewById(R.id.imageView1);
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    int m_iNetworkType = (activeNetwork == null) ? -1 : activeNetwork.getType();

    if (m_iNetworkType == cm.TYPE_WIFI) {
        ethernet.setVisibility(View.INVISIBLE);
        unableNetwork.setVisibility(View.INVISIBLE);
    } else if (m_iNetworkType == cm.TYPE_ETHERNET) {
        ethernet.setVisibility(View.VISIBLE);
        unableNetwork.setVisibility(View.INVISIBLE);
    } else {   //error
        ethernet.setVisibility(View.INVISIBLE);
        unableNetwork.setVisibility(View.VISIBLE);
    }
}
@Override
protected void onResume(){
    super.onResume();
    ethernet = (ImageView) findViewById(R.id.imageView2);
    unableNetwork = (ImageView) findViewById(R.id.imageView1);
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    int m_iNetworkType = (activeNetwork == null) ? -1 : activeNetwork.getType();

    if (m_iNetworkType == cm.TYPE_WIFI) {
        ethernet.setVisibility(View.INVISIBLE);
        unableNetwork.setVisibility(View.INVISIBLE);
    } else if (m_iNetworkType == cm.TYPE_ETHERNET) {
        ethernet.setVisibility(View.VISIBLE);
        unableNetwork.setVisibility(View.INVISIBLE);
    } else {
        ethernet.setVisibility(View.INVISIBLE); 
        unableNetwork.setVisibility(View.VISIBLE);
    }
}
}

ChangeReceiver.class

public class ChangeReceiver extends BroadcastReceiver {
    ImageView ethernet;
    ImageView unableNetwork;
    View v;

@Override
public void onReceive(Context context, Intent intent) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    ethernet = (ImageView) v.findViewById(R.id.imageView2); //error

    unableNetwork = (ImageView) v.findViewById(R.id.imageView1);
    int m_iNetworkType = (activeNetwork == null) ? -1 : activeNetwork.getType();

    if (m_iNetworkType == cm.TYPE_WIFI) {
        ethernet.setVisibility(View.INVISIBLE);
        unableNetwork.setVisibility(View.INVISIBLE);
    } else if (m_iNetworkType == cm.TYPE_ETHERNET) {
        ethernet.setVisibility(View.VISIBLE);
        unableNetwork.setVisibility(View.INVISIBLE);
    } else { //error
        ethernet.setVisibility(View.INVISIBLE);
        unableNetwork.setVisibility(View.VISIBLE);
    }
}
}

1 个答案:

答案 0 :(得分:0)

崩溃是因为没有创建视图,请尝试:

CountOfVariances

如果您希望自己可以使用线程,以获得更高的性能:

public class ChangeReceiver extends BroadcastReceiver{
    ImageView ethernet;
    ImageView unableNetwork;

    @Override
    public void onReceive(Context context, Intent intent) {
         ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
         NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

         View v = ((Activity) context);
         ethernet = (ImageView) v.findViewById(R.id.imageView2); //error

         unableNetwork = (ImageView) v.findViewById(R.id.imageView1);
         int m_iNetworkType = (activeNetwork == null) ? -1 : activeNetwork.getType();
.....

我希望我有所帮助,对不起我的英语不好。