gpt4 book ai didi

android - 在后台检查互联网连接

转载 作者:行者123 更新时间:2023-11-29 14:45:08 26 4
gpt4 key购买 nike

我需要在后台检查互联网连接....我正在我的数据库中保存一些数据,每当我连接到互联网时,它应该将数据上传到我的服务器上......我需要一个后台服务,即使我关闭了我的应用程序,它也会持续检查互联网连接,我尝试了几种方法,但只有当我打开我的应用程序时它们才有效......目前我正在这样检查互联网连接

/checking internet connection

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {

//we are connected to a network
connected = true;

}
else
//not connected to internet
connected = false;

if(connected) {
//getting teacher data if INTERNET_STATE is true(if will be still true if connected to a wifi or network without internet)
getOfflineSubjectData();
getTeacherData();
}
else{
getOfflineSubjectData();
Toast.makeText(teacher_homePage.this,"no internet",Toast.LENGTH_SHORT).show();
}

注意我不想要一种在我关闭我的应用程序后不起作用的方法......就像我们关闭应用程序时的whatsapp一样,我们仍然收到短信

最佳答案

我知道现在回答您的问题为时已晚,但这仍然是一个完美的解决方案。

我们可以通过同时使用一个服务和一个广播接收器来轻松地做到这一点,以获得您想要的输出。这将始终有效,即当应用程序正在运行时,应用程序被最小化或者当应用程序甚至从最小化的应用程序中删除时。

  1. list 代码:

    <application
    ...
    <service android:name=".MyService" />
    </application>
  2. MyService.java

    import android.app.Notification;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.app.Service;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.IBinder;
    import android.support.annotation.Nullable;
    import android.support.v4.app.NotificationCompat;
    import android.util.Log;
    import android.widget.Toast;

    public class MyService extends Service {

    static final String CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
    NotificationManager manager ;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
    return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    // Let it continue running until it is stopped.
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
    BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (CONNECTIVITY_CHANGE_ACTION.equals(action)) {
    //check internet connection
    if (!ConnectionHelper.isConnectedOrConnecting(context)) {
    if (context != null) {
    boolean show = false;
    if (ConnectionHelper.lastNoConnectionTs == -1) {//first time
    show = true;
    ConnectionHelper.lastNoConnectionTs = System.currentTimeMillis();
    } else {
    if (System.currentTimeMillis() - ConnectionHelper.lastNoConnectionTs > 1000) {
    show = true;
    ConnectionHelper.lastNoConnectionTs = System.currentTimeMillis();
    }
    }

    if (show && ConnectionHelper.isOnline) {
    ConnectionHelper.isOnline = false;
    Log.i("NETWORK123","Connection lost");
    //manager.cancelAll();
    }
    }
    } else {
    Log.i("NETWORK123","Connected");
    showNotifications("APP" , "It is working");
    // Perform your actions here
    ConnectionHelper.isOnline = true;
    }
    }
    }
    };
    registerReceiver(receiver,filter);
    return START_STICKY;
    }

    @Override
    public void onDestroy() {
    super.onDestroy();
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
    }
    }
  3. ConnectionHelper.java

    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;

    public class ConnectionHelper {

    public static long lastNoConnectionTs = -1;
    public static boolean isOnline = true;

    public static boolean isConnected(Context context) {
    ConnectivityManager cm =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    return activeNetwork != null && activeNetwork.isConnected();
    }

    public static boolean isConnectedOrConnecting(Context context) {
    ConnectivityManager cm =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    return activeNetwork != null &&
    activeNetwork.isConnectedOrConnecting();
    }

    }
  4. 您的 Activity 代码

    startService(new Intent(getBaseContext(), MyService.class));

关于android - 在后台检查互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41828490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com