Android 在安卓系统中经常检查互联网连接是否可用?

Android 在安卓系统中经常检查互联网连接是否可用?,android,service,netconnection,Android,Service,Netconnection,我的应用程序是通过网络连接将数据保存到服务器。如果网络不可用,我将其保存在本地,然后在网络可用时再次发送到服务器。我的问题是经常检查互联网连接。所以我尝试了服务功能来检查网络连接。但它只打了一次电话。如何解决我的问题。有人愿意帮助我吗 提前谢谢 更新 package com.android.cdtech; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.C

我的应用程序是通过网络连接将数据保存到服务器。如果网络不可用,我将其保存在本地,然后在网络可用时再次发送到服务器。我的问题是经常检查互联网连接。所以我尝试了服务功能来检查网络连接。但它只打了一次电话。如何解决我的问题。有人愿意帮助我吗 提前谢谢

更新

package com.android.cdtech;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.view.View;

class ReceiverName extends Activity {
    BroadcastReceiver r = new BroadcastReceiver(){

    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager cm = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
        if (cm == null)
            return;
        if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()) {
            saveData();
        } else {
            // Do nothing or notify user somehow
        }

    }
    // code to handle broadcase

    private void saveData() {
        final saveData dh=new saveData(this); //Class for Creating a Database
        webService calService=new  webService();
        dh.open();
        Cursor c = dh.pay();

        String text = "";
        do {
            text = text + " " + "\n" + c.getString(4);
            System.out.println(c.getCount());
            // Toast.makeText(this,"Name:" +c.getString(1)+c.getString(2)+c.getString(3)+c.getString(4)+"",Toast.LENGTH_LONG).show();
            calService.paymentReceipt("PaymentReceipt", c.getString(1), c.getString(2), c.getString(3), c.getString(4), "gf", "0");
         }
         while (c.moveToNext()); 
         dh.close();
        }
    };
}

您应该使用TimerTask而不是服务来编写代码,因为OnCreate()在整个服务生命周期中只执行一次

mTimerTask = new TimerTask() {

    @Override
    public void run() {

        ConnectivityManager conMgr = (ConnectivityManager)   getSystemService      (Context.CONNECTIVITY_SERVICE);
        if (conMgr.getActiveNetworkInfo() != null &&  conMgr.getActiveNetworkInfo().isAvailable() &&    conMgr.getActiveNetworkInfo().isConnected()) {
             Toast.makeText(this, "net Started", Toast.LENGTH_LONG).show();
             saveData();
        }

     }
};
//每5秒钟检查一次互联网连接

mTimer = new Timer();
mTimer.scheduleAtFixedRate(mTimerTask,1000,5000);

您可以不使用任何计时器,只需注册接收器以监听连接更改:

<receiver android:name=".ReceiverName" >
    <intent-filter >
        <action android:name="android.net.wifi.STATE_CHANGE" />
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

C我的更新Sujit,它进入异常(空指针异常)始终使用广播接收器或服务检查后台internet是否正在运行。异常是什么。请共享logfinal saveData dh=新的saveData(此);先生,如果我扩展BroadcastReceiver,我就不能在这里传递上下文。我想
这个
活动
的实例?你通过活动干什么?通常
Context
就足够了。构造函数saveData(new BroadcastReceiver(){})未定义,我得到了如下错误,先生。我再次更新我的代码sirsaveData是用于创建数据库的类只需将其构造函数更改为saveData(Context)-您不需要在那里执行活动
public class ReceiverName extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        ConnectivityManager cm = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
        if (cm == null)
            return;
        if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()) {
            // Send here
        } else {
            // Do nothing or notify user somehow
        }

    }
}