我开发了一个有注册表的应用程序。如果候选移动设备连接到网络,则注册表单中的数据将上传到 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
}
}
再次感谢大家
答案 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>