Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >连续检查Android网络

连续检查Android网络
EN

Stack Overflow用户
提问于 2013-11-13 21:50:58
回答 2查看 3.3K关注 0票数 0

我想用这种方式不断地验证Android系统的网络,但是我认为这种形式是不正确的,如果wifi或其他网络上的连接可用,我的服务应该更新。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ObjService extends Service{

    private final static int NOTIFICATION=1;
    public static boolean process;
    private NotificationManager state;
    private NotificationCompat.Builder objBuilder;

    public void onCreate(){
     process=true;
    state=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);    
    objBuilder = new NotificationCompat.Builder(this)
            .setContentTitle("Title")
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.launchimg))
            .setSmallIcon(R.drawable.notification_img);



  Thread checker=new Thread(){//1
    public void run(){//2
    while (process){//3
    if (verifyConnection()){//4
      updateNotificationService("Service is available");
    }else{
     updateNotificationService("Service is not available");
    }//4
     try{
       Thread.sleep(6000);
     }catch(InterruptedException e){
      //..printLog..
     }
    }//3
   };//2

};//1
checker.start();
.
.
.

我的函数verifyConnection()是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean verifyConnection() {

        boolean flag = true;

      ConnectivityManager connec = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);

       NetworkInfo[] net = connec.getAllNetworkInfo();

       if (!net[0].isAvailable() && !net[1].isAvailable())
       {
           flag = false;

       }
       return flag;  

    }

updateNotificationService()是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void updateNotificacionService(String arg){

objBuilder.setContentText(arg)
.setWhen(System.currentTimeMillis());

state.notify(NOTIFICATION, objBuilder.build());
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-13 22:30:32

尝试下面的代码来侦听连接是否存在,如果连接状态发生变化,则通知更改,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class NetworkStateReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
 super.onReceive(context, intent);
 Log.d("app","Network connectivity change");
 if(intent.getExtras()!=null) {
    NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
    if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
        Log.i("app","Network "+ni.getTypeName()+" connected");
    }
 }
 if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
        Log.d("app","There's no network connectivity");
 }
}
}

然后作为清单,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<receiver android:name=".NetworkStateReceiver">
   <intent-filter>
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
   </intent-filter>
</receiver>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

参考资料:Internet侦听器Android示例

票数 4
EN

Stack Overflow用户

发布于 2020-03-12 09:55:21

Android7.0(APILevel24)对广播设置了限制,如背景优化中所述。Android8.0(APILevel26)使这些限制更加严格。 应用程序可以在运行时使用Context.registerReceiver()注册任何广播的接收器,无论是隐式广播还是显式广播。

文档参考文献

因此,下面是一个实用工具类,它利用上下文注册的BroadcastReceiverLifeCycleObserver来实现单一责任原则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ConnectionUtil implements LifecycleObserver {

    private ConnectivityManager mConnectivityMgr;
    private Context mContext;
    private NetworkStateReceiver mNetworkStateReceiver;

    interface ConnectionStateListener {
        void onAvailable(boolean isAvailable);
    }

    ConnectionUtil(Context context) {
        mContext = context;
        mConnectivityMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        ((AppCompatActivity) mContext).getLifecycle().addObserver(this);
    }


    void onInternetStateListener(ConnectionStateListener listener) {
        mNetworkStateReceiver = new NetworkStateReceiver(listener);
        IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        // Registering the Context Registered Receiver
        mContext.registerReceiver(mNetworkStateReceiver, intentFilter);
    }


    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy() {

        // Removing lifecycler owner observer
        ((AppCompatActivity) mContext).getLifecycle().removeObserver(this);

        // Unregistering the Context Registered Receiver
        if (mNetworkStateReceiver != null)
            mContext.unregisterReceiver(mNetworkStateReceiver);

    }


    public class NetworkStateReceiver extends BroadcastReceiver {

        ConnectionStateListener mListener;

        public NetworkStateReceiver(ConnectionStateListener listener) {
            mListener = listener;
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getExtras() != null) {
                NetworkInfo activeNetworkInfo = mConnectivityMgr.getActiveNetworkInfo();

                if (activeNetworkInfo != null && activeNetworkInfo.getState() == NetworkInfo.State.CONNECTED) {
                    // Connected to the internet
                    mListener.onAvailable(true);

                } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
                    // Not connected to the internet
                    mListener.onAvailable(false);
                }
            }
        }
    }

}

宣言许可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainActivity extends AppCompatActivity {

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

        ConnectionUtil mConnectionMonitor = new ConnectionUtil(this);
        mConnectionMonitor.onInternetStateListener(new ConnectionUtil.ConnectionStateListener() {
            @Override
            public void onAvailable(boolean isAvailable) {
                if(isAvailable)
                    Toast.makeText(MainActivity.this, "Connected", Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(MainActivity.this, "Disconnected", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

注意:从API 29开始就不再推荐NetworkInfo了,您可以使用ConnectivityManager.NetworkCallback及其onAvailable() & onLost()回调来实现相同的目的,而不是使用BroadcastReceiver这个答案可以指导实现这一目的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19970515

复制
相关文章
Android 性能分析学习(检查网络活动)
Network Profiler 可以检测到APP到网络请求,包括发送和接收的数据以及当前的连接数。这样可以检查到应用传输数据的方式和时间,并适当优化底层代码。
艳龙
2021/12/16
1.4K0
Android 性能分析学习(检查网络活动)
Android应用权限检查
现在应用市场的要求越来越高了,而且随着Android版本的升级,官方对于权限这部分的管控越来越严格,因此我们秉着最少可用原则,绝不向用户申请额外的权限,但由于团队规模越来越大,很难保证某个模块没有新增权限,所以我们需要一个工具可以简单的给出每个版本应用的权限变化信息。
岛哥的质量效能笔记
2021/08/18
8570
Android应用权限检查
一个简单的问题:什么是连续网络和不连续网络?
有类网络的每对子网之间传输的数据包只通过同类型网络的子网,不通过其他类型网络的子网。
网络技术联盟站
2023/03/05
8350
一个简单的问题:什么是连续网络和不连续网络?
android之app debug/release检查
例如测试版本打印log信息或者是输出某些日志文件,但是正式版本不希望输出这些信息。
李小白是一只喵
2021/01/29
8040
2.检查网络状态
当应用程序需要访问网络时,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理。最好能监听设备的网络状态的改变,当设备网络状态连接、断开时,程序也应该有相应的处理。   工欲善其事必先利器,在检查设备的网络状态前,我们要先实现两个步骤: 下载,添加Reachability类。 下载Reachability.zip压缩包,最新的版本为V3.5,解压该压缩包会得到一个Xcode项目,其实关键是得到改项目的Reachability.h和 Reachability.m文
猿人谷
2018/01/17
1.3K0
2.检查网络状态
检查网络配置信息
[root@desktop40 ~]# ifconfig br0 Link encap:Ethernet HWaddr 00:0C:29:4E:5B:F2 inet addr:192.168.1.131 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe4e:5bf2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3790 errors:0 dropped:0 overruns:0 frame:0 TX packets:386 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:504418 (492.5 KiB) TX bytes:36497 (35.6 KiB)
全栈程序员站长
2022/07/06
5080
Android连续点击多次事件的实现
System提供的一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。
用户1289394
2021/07/30
1.3K0
Android连续的获取蓝牙的RSSI
基于蓝牙的RSSI可以有很多应用,要获得蓝牙的RSSI无外乎两种方法,一种就是基于扫瞄的方法,优点是Android本身支持,缺点是scan的时间比较长,并且中间过程不受控制,为了连续的测量,需要不断的scan;第二种就是,基于连接的方法,前提是要建立两个蓝牙设备的连接后,再测量RSSI,优点是后期测量比较方便,间隔时间也较短。
黄林晴
2022/01/20
1.6K0
Android连续的获取蓝牙的RSSI
使用FindBugs插件检查Android代码
概述 FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通过使用 Visitor 模式。 FindBugs—代码缺陷分类 Badpractice:不好的做法,代码违反了公认的最佳实践标准; Maliciouscode vulnerability:恶意的代码漏洞; Correctness:正确性; Performance:潜在的性能问
用户1205080
2019/01/23
8380
Android资源大小检查测试方案
每个版本专项测试都需要记录apk的总大小值,然后对比每个版本的包大小总值,这个总大小对于开发并没有什么实际价值,因为不够细化apk中各种资源的大小.
测试加
2022/03/24
6890
Android资源大小检查测试方案
使用Android Lint检查代码缺陷
Android Lint 是Android自带的代码检查工具,它能帮助我们识别很多潜在的错误。
张云飞Vir
2020/03/16
1.2K0
杂谈:ubuntu检查网络状态命令
参考博客:https://blog.csdn.net/yph001/article/details/80177154
CV_Learner
2019/12/10
3.8K0
Android Studio 之 项目瘦身、代码检查
  项目瘦身, 一、删除没有用到的资源(图片,string 等等)     先看怎么样找到没有用到的资源,注意:注释掉的 也属于没有用到的。   1、进行代码分析操作   2、查看分析结果   3、选
听着music睡
2018/05/18
1.6K0
检查Android是否具有摄像头
通常我们进行摄像头操作,如扫描二维码需要判断是否有后置摄像头(Rear camera),比如Nexus 7 一代就没有后置摄像头,这样在尝试使用的时候,我们需要进行判断进行一些提示或者处理。
技术小黑屋
2018/09/04
1K0
解决Typecho评论时显示「网络错误,检查网络问题」
多次定位问题后发现是手机端User Agent字段过长了,解决方法也很简单,将typecho数据库中评论的数据表typecho_comments表的agent字段长度改为1000即可。
Hsinyan
2022/08/30
9230
解决Typecho评论时显示「网络错误,检查网络问题」
如何检查 Android 设备是否支持 Widevine DRM
想知道您的 Android 设备是否可以流式传输来自 Netflix 和 Amazon Prime Video 的高清视频?这是检查 Widevine DRM 支持的方法!
天天Lotay
2023/10/15
2.8K0
如何检查 Android 设备是否支持 Widevine DRM
使用facebook的infer检查Android代码缺陷
Infer 是一个静态分析工具,它能在 Android 和 iOS 的编译过程中今夕代码分析,发现缺陷。使用起来也很简单方便。
张云飞Vir
2020/03/16
1.9K0
点击加载更多

相似问题

是否可用连续检查网络连接?

35

后台检查网络(android)

10

实时网络检查- Android

114

Android Internet检查(不是网络检查)

12

Android - App WebView -网络检查

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文