在执行某些特定操作后执行后台进程的最佳方法是什么?

时间:2013-03-09 16:31:58

标签: android background-process

我正在编写一个连接到特定WIFI网络的Android应用程序。棘手的部分是,当用户手动连接到其他网络,或关闭WIFI,或连接丢失(因为用户走开)...我需要忘记这个网络(removeNetwork)。

我的问题如下:我该怎么做才能做到这一点?

  • 我是否需要创建一个在后台运行的服务,每5分钟检查一次WIFI的状态是什么?
  • 当WIFI改变某些特定状态时,是否有任何“钩子”方法来运行类,方法,函数?
  • 实现此问题的最佳方法是什么?

非常感谢!

2 个答案:

答案 0 :(得分:2)

我建议你在你的应用程序中实现一个广播接收器,只要网络或wifi连接有任何变化就可以激活,并且在广播接收器的onRecieve()方法中,你可以在任何时候进行任何处理。连接丢失了。

这在您的清单中

<receiver android:name=".WifiReceiver" >
    <intent-filter>
       <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver> 

这是java代码。 公共类WifiReceiver扩展BroadcastReceiver {     private final String TAG =“WifiReceiver”;

@Override
public void onReceive(Context context, Intent intent) {
    int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
    String wifiStateText = "No State";

    switch (wifiState) {
    case WifiManager.WIFI_STATE_DISABLING:
        wifiStateText = "WIFI_STATE_DISABLING";
        break;
    case WifiManager.WIFI_STATE_DISABLED:
        wifiStateText = "WIFI_STATE_DISABLED";
        break;
    case WifiManager.WIFI_STATE_ENABLING:
        wifiStateText = "WIFI_STATE_ENABLING";
        break;
    case WifiManager.WIFI_STATE_ENABLED:
        wifiStateText = "WIFI_STATE_ENABLED";
        break;
    case WifiManager.WIFI_STATE_UNKNOWN:
        wifiStateText = "WIFI_STATE_UNKNOWN";
        break;
    default:
        break;
    }
    MyLog.d(TAG, "onReceive Broadcast > WiFiState: " + wifiStateText);
    MyLog.d(TAG, "onReceive Broadcast > Time: " + new Date());
}

} 并且不要忘记添加以下权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

答案 1 :(得分:1)

请查看以下有关创建将在网络状态更改时调用的BroadcastReriever的帖子:

Internet listener Android example

Network listener Android