YXTS122 2017-04-26 04:11 采纳率: 100%
浏览 1173
已采纳

这程序哪里是在监听网络变化

图片说明
图片说明
按书上所说,按Home键,然后启动和禁用网络,不出现toast
可是按返回键,回到桌面就出现toast,如下图:
图片说明

 package com.example.broadcasttest;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {
    private boolean mReceiverTag=false;
    private IntentFilter intentFilter;
    private NetworkChangeReceiver networkChangeReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter=new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        networkChangeReceiver=new NetworkChangeReceiver();
    }

    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        if(!mReceiverTag)
        {
            mReceiverTag=true;
            registerReceiver(networkChangeReceiver,intentFilter);
        }
        else
        {
            mReceiverTag=false;
            unregisterReceiver(networkChangeReceiver);
        }
    }

    class NetworkChangeReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context,Intent intent)
        {
            Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

如果是这样的话,这程序哪里是在监听网络变化?

  • 写回答

1条回答

  • RaleighLuo 2017-04-26 05:07
    关注

    网络发送变化时,系统会发送一个广播 (安卓系统执行的代码,我简单的写下sendBroadcast)

    sendBroadcast(new Intent("android.net.conn.CONNECTIVITY_CHANGE"))
    

    _因为你注册了监听器

      registerReceiver(networkChangeReceiver,intentFilter);
    

    所以能收到通知,顺便说一下注册应该写到onCreate里面。
    你可以看下发送广播和接收广播这方面的知识,就容易理解了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名