2014-01-21 48 views
1

每當互聯網連接可用時,我想下載一些數據,包括json和圖像(二進制數據)。檢測到互聯網連接時下載數據

我有一個完整的工作代碼,可以做到這一點。問題是我已經在自定義應用程序類中編寫了該代碼。它下載並保存在本地。但是當應用程序啓動時,互聯網連接可能無法在該時間點使用。

因此,我想要做的就是在檢測到互聯網連接時發送請求並下載數據,並通過在本地將其保存在內容提供商中來使用該數據。即使沒有互聯網連接,應用程序也可以工作。

我正在考慮使用廣播接收器來下載它。但是,廣播接收機下載數據將是一項繁重的任務。所以現在我發現我可以檢查廣播接收器中的互聯網連接,我將從其他組件下載數據。這是最佳做法嗎?

即使應用程序不在應用程序中,廣播接收器是否仍然存在?

+0

我應該使用哪種許可? – Chaitanya

回答

4

這是最佳做法嗎?

最好的方法是使用IntentService

從您的BroadcastReceiver啓動此服務。通過IntentService,所有請求都在單個工作線程上處理 - 它們可能需要的時間會很長(並且不會阻塞應用程序的主循環),所以不用擔心任務的時間。

即使應用程序不在應用程序中,廣播接收器是否仍然存在?

是的,如果他們是通過清單註冊的。


有用資源

  1. Creating a Background Service
  2. IntentService Basics
1
提到你可以 Monitor for Changes in Connectivity

1日,Android開發者指南中

- 創建一個NetworkChangeReceiver類,它是一個BroadCastR eceive,在那裏你實現你的代碼來下載你想要的東西:

public class NetworkChangeReceiver extends BroadcastReceiver { 

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

    final ConnectivityManager connMgr = (ConnectivityManager) context 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 

    final NetworkInfo wifi = connMgr 
      .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    NetworkInfo activeNetwork = connMgr.getActiveNetworkInfo(); 

    boolean isConnected = wifi != null && 
       wifi.isConnected() ; 

    if (isConnected) { 
     // Do something 

     Log.d("Netowk Available ", "Flag No 1"); 
    } 
    } 
} 

2日 - 您註冊像清單文件的BroadCastReceiver如下:

<receiver android:name=".NetworkChangeReceiver" > 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 

      </intent-filter> 
</receiver>