场景是当我的应用程序处于脱机状态时,我正在将某些信息存储在我需要发送到服务器的数据库中。所以当网络可用时,我想通过Api调用发送这些。每当网络可用时,是否有任何方法可以调用方法?如何每次在Android中使用网络时调用方法?
-1
A
回答
0
创建广播接收器:
public class InternetBroadcastReceiver extends BroadcastReceiver {
static final String TAG = "InternetReceiver";
private static int networkType = -1;
private static boolean connectedWithNetwork = false;
public static void initNetworkStatus(Context context) {
ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
networkType = -1;
if (networkInfo != null) {
Log.d(TAG, "Init: ACTIVE NetworkInfo: " + networkInfo.toString());
if (networkInfo.isConnected()) {
networkType = networkInfo.getType();
}
}
Log.d(TAG, "initNetworkStatus -> " + networkType);
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive " + intent.getAction());
try {
if (intent.getAction().equals(Intent.ACTION_SHUTDOWN)) {
Log.d(TAG, "System shutdown, stopping yaxim.");
} else if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
boolean isConnected = (networkInfo != null) && (networkInfo.isConnected() == true);
boolean wasConnected = (networkType != -1);
if (connectedWithNetwork && isConnected)
return;
connectedWithNetwork = isConnected;
if (wasConnected && !isConnected) {
Log.d(TAG, "we got disconnected");
networkType = -1;
} else if (isConnected && (networkInfo.getType() != networkType)) {
Log.d(TAG, "we got (re)connected: " + networkInfo.toString());
networkType = networkInfo.getType();
try {
Intent bIntent = new Intent("custom-event-name");
bIntent.putExtra("subject", Utils.SUBJECT_INTERNET_CONNECTED);
LocalBroadcastManager.getInstance(context).sendBroadcast(bIntent);
} catch (Exception e) {
e.printStackTrace();
}
} else if (isConnected && (networkInfo.getType() == networkType)) {
Log.d(TAG, "we stay connected, sending a ping");
try {
Intent bIntent = new Intent("custom-event-name");
bIntent.putExtra("subject", Utils.SUBJECT_INTERNET_CONNECTED);
LocalBroadcastManager.getInstance(context).sendBroadcast(bIntent);
} catch (Exception e) {
e.printStackTrace();
}
} else
return;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
,并在清单文件注册
<receiver android:name=".packagename.InternetBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
0
/// BROADCAST RECEIVER CLASS
public class UpdateReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent arg1)
{
boolean isConnected = arg1.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (isConnected) {
} else {
//FETCH YOUR DATA FROM SQLITE
//CALL API
}
}
}
/// ANDROID MANIFEST CODE
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name="com.example.welcome.nkew.UiUtils.UpdateReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
+0
谢谢你的答案。这对我帮助很大 –
相关问题
- 1. 如何在Rails中每小时调用一次方法?
- 2. 如何在'无蜂窝网络可用'时调用方法
- 3. 如何在Android上每帧调用一次Activity方法?
- 4. 如何使用aws api网关在android中调用GET方法?
- 5. 每次调用任何方法时调用宏 - 目标C
- 6. 每次调用任何其他方法之前调用方法
- 7. 如何在线程中每次调用方法?
- 8. 如何在android webview中使用angularjs时禁用网络安全?
- 9. Application_Start()每次调用时,如果网站不使用,而
- 10. 如何每6小时执行一次任务或当网络适用于Android?
- 11. 如何在Android中多次调用方法
- 12. 如何在每次请求时使用Tornado调用初始化
- 13. c#使用sharpPcap制作的网络监视器应用程序,每次调用应显示一个msgbox的方法每次调用显示多个msgboxes
- 14. 网络方法调用动态绑定
- 15. 每x分钟调用一次方法
- 16. '在NPObject上调用方法时出错!'通过网络链接
- 17. 递归方法 - 在每次调用时增加一个值
- 18. 如何在webView,Android中使用@JavascriptInterface方法调用Javascript?
- 19. 如何在android中使用Get方法调用Web服务
- 20. 如何在每一分钟使用java调用方法?
- 21. Ajax调用不能使用网络方法
- 22. 使用网络工作者调用页面方法
- 23. 如何每x秒调用一次方法?
- 24. 如何调用完成方法每次返回
- 25. Laravel - 如何自动每天调用一次方法
- 26. 如何每秒调用一次方法objective-c
- 27. Android:在服务中使用网络
- 28. 如何在javascript中调用接口并调用android方法?
- 29. 如何从android中调用javascript方法
- 30. 如何调用取决于rx网络调用的非rx网络调用
使用广播接收器 –
你必须使用广播接收器 –
如果您定位的Androidñ预览。根据Google的限制,Receiver无法工作。链接:https://developer.android.com/preview/features/background-optimization.html#connectivity-action – crashOveride