2016-02-12 88 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