2016-02-12 66 views
0

你好,大家好我只是一個簡單的問題是如何運行的連續後臺的Android代碼的一些塊,安卓:在後臺運行,隨時連接互聯網

的情況是檢查連接互聯網或沒有,因此它會上傳服務器上的文件(這將在後臺連續運行)。

我收到類似BroadcastReceiver的東西,但我認爲它只能檢查互聯網連接。

這將有很大的幫助,如果有人給一個代碼塊,讓我明白...

謝謝!!!!!

+0

的可能重複[我怎樣才能運行Android上的後臺線程的代碼?](http://stackoverflow.com/questions/15472383/how-can-i-run-代碼在Android上的後臺線程) – Rakesh

+0

收聽連接廣播事件,並從您的廣播接收器啓動一項服務,做什麼你需要做的內部服務,應該是這樣。 –

回答

1

我給你舉個例子

可以輕鬆地檢查這個

您的連接創建NetworkUtils類:

public class NetworkUtil { 
    public static final int NOT_CONNECTED = 0; 
    public static final int WIFI = 1; 
    public static final int MOBILE = 2; 
    public static int getConnectionStatus(Context context){ 
     ConnectivityManager connectivityManager = 
       (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 

     if(networkInfo != null){ 
      if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI){ 
       return WIFI; 
      } 
      if(networkInfo.getType() == ConnectivityManager.TYPE_MOBILE){ 
       return MOBILE; 
      } 
     } 
     return NOT_CONNECTED; 
    } 
} 

創建NetworkConnectivityCheck類:

public class NetworkConnectivityCheck { 
    public boolean internetAvailable = false; 
    private BroadcastReceiver networkChangeReceiver; 

    NetworkConnectivityCheck(){ 

     this.networkChangeReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       int networkState = NetworkUtil.getConnectionStatus(context); 
       if(networkState == NetworkUtil.NOT_CONNECTED){ 
        internetAvailable = false; 
        MainActivity.tvStatus.setText("OFFLINE"); 

       } else if(networkState == NetworkUtil.MOBILE){ 
        internetAvailable = true; 
        MainActivity.tvStatus.setText("ONLINE"); // you do something here. 
       } else if(networkState == NetworkUtil.WIFI){ 
        internetAvailable = true; 
        MainActivity.tvStatus.setText("ONLINE"); // you do something here 
       } 
      } 
     }; 
    } 



    public void register(Context context){ 
     context.registerReceiver(networkChangeReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
    } 
    public void unregister(Context context){ 
     context.unregisterReceiver(networkChangeReceiver); 
    } 
} 

及主要活動:

public class MainActivity extends AppCompatActivity { 
    private NetworkConnectivityCheck networkConnectivityCheck; 

    public static TextView tvStatus; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tvStatus = (TextView)findViewById(R.id.tvStatus); 

     networkConnectivityCheck = new NetworkConnectivityCheck(); 
     networkConnectivityCheck.register(this); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     networkConnectivityCheck.register(this); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     networkConnectivityCheck.unregister(this); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     networkConnectivityCheck.unregister(this); 
    } 
} 
+1

謝謝你很多** Huy Nguyen **它幫助了我很多,你能給我多一個答案,如何保持應用程序運行在像WhatsApp或信使的背景.... – Manish

+0

嗨Manish! 因爲這是一個複雜的應用程序,所以我不能給你一個清晰的例子。 要做這樣的應用程序,您應該瞭解更多關於BroadcastReceiver,Service,Notification,以及一些後端服務,例如推送通知的「Parse」。 學習高級編程的有效方法是解碼從Playstore下載的APK文件。您可以使用apkpure.com從商店下載APK文件。然後使用dex2jar + jdgui解碼該文件。 我認爲這對你絕對有幫助。 :) – alway5dotcom

+0

謝謝Huy Nguyen,你對我做了很大的幫助! – Manish