移动连接到网络时自动同步Android应用程序数据

时间:2016-10-19 04:39:00

标签: android broadcastreceiver

我开发了一个有注册表的应用程序。如果候选移动设备连接到网络,则注册表单中的数据将上传到 WebService 。否则,数据将存储在本地 MySQL 数据库中。

我现在想要的是,当移动设备连接到网络时,本地存储的数据应该上传到WebService,即使他没有打开该应用程序。我希望功能与WHATSAPP相同。

已编辑已解决

最后我找到了解决这个问题的方法。非常感谢大家的参与。

package com.example.detapp;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;

    public class InternetConnector_Receiver extends BroadcastReceiver {
        boolean isVisible;
        public static int flag1=0;
        public InternetConnector_Receiver() {

                                             }

        @Override
        public void onReceive(Context context, Intent intent) {
            try {

                ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                    NetworkInfo networkInfo = connectivityManager
                            .getActiveNetworkInfo();

                    // Check internet connection and accrding to state change the
                    // text of activity by calling method
                    if ((networkInfo.isConnected()==true)) {
                        Log.i("*************DEEPA* insideif", "*********network : " +networkInfo.isConnected() );
                        flag1=1;
                        Toast.makeText(context, "*INTERNET CONNECTED*", Toast.LENGTH_SHORT).show();

                        new MainActivity().Synchronization(flag1);


                    } else {
                        flag1=0;

                        Toast.makeText(context, "*NO INTERNET*", Toast.LENGTH_SHORT).show();

                        new MainActivity().Synchronization(flag1);
                    }

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }

`

添加了此广播接收器类InternetConnector_Receiver.java。即使您不在应用程序中,这也可以正常工作。

在MainActivity.java中,我添加了以下代码

protected void Synchronization(int flag)
    {
    if(flag==1)
    {
        //call webservice or sync Adapters here to synch data
    }
    }

再次感谢大家

2 个答案:

答案 0 :(得分:1)

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


public class CustomBroadCastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(isNetworkAvail(context)){
            //TODO:
        }
    }
    public boolean isNetworkAvail(Context mContext) {
        try {
            ConnectivityManager connectivity = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivity != null) {
                NetworkInfo[] info = connectivity.getAllNetworkInfo();
                if (info != null)
                    for (int i = 0; i < info.length; i++)
                        if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                            return true;
                        }
            }
            return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

答案 1 :(得分:0)

如果您的应用需要在后台运行,则创建广播接收器,并在清单文件中指定intent-filter和permission。 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><receiver android:name=".CustomBroadCastReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver>