場景是當我的應用程序處於脫機狀態時,我正在將某些信息存儲在我需要發送到服務器的數據庫中。所以當網絡可用時,我想通過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