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 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建