7

我想在我的 Android 应用程序运行期间检查 Internet 连接。我尝试使用服务,但似乎它不是最好的选择。我有什么可能的方法在服务中实现广播接收器吗?还是我必须放弃服务并单独使用广播接收器?

4

3 回答 3

9

我将向您展示如何在服务中创建 SMS 接收器:

public class MyService extends Service {

@Override
public void onCreate() {
    BwlLog.begin(TAG);
    super.onCreate();

    SMSreceiver mSmsReceiver = new SMSreceiver();
    IntentFilter filter = new IntentFilter();
    filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
    filter.addAction(SMS_RECEIVE_ACTION); // SMS
    filter.addAction(WAP_PUSH_RECEIVED_ACTION); // MMS
    this.registerReceiver(mSmsReceiver, filter);

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    return START_STICKY;
}

   /**
 * This class used to monitor SMS
 */
class SMSreceiver extends BroadcastReceiver {

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

        if (TextUtils.equals(intent.getAction(), SMS_RECEIVE_ACTION)) {
             //handle sms receive
        }
    }
}
于 2013-05-06T08:53:09.173 回答
3

每秒检查一次连接是不明智的。或者,您可以收听操作(ConnectivityManager.CONNECTIVITY_ACTION)并确定您是否连接到活动网络。

IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);

此外,您可以检查当前活动的网络类型(Type_WIFI,Type_MOBILE)

这样,您就不需要每秒检查连接的服务。

于 2013-05-06T10:31:53.357 回答
1

您无需使用ServiceBroadCastReceiver用于此目的。每次需要 ping 服务器时,只需检查连接状态。

您可以编写一个方法来检查这一点并boolean根据连接状态返回(真/假)。下面的方法也是一样的。

public static boolean isNetworkAvailable(Context mContext) {

        try {
            final ConnectivityManager conn_manager = (ConnectivityManager) mContext
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            final NetworkInfo network_info = conn_manager
                    .getActiveNetworkInfo();

            if (network_info != null && network_info.isConnected()) {
                if (network_info.getType() == ConnectivityManager.TYPE_WIFI)
                    return true;
                else if (network_info.getType() == ConnectivityManager.TYPE_MOBILE)
                    return true;
            }

        } catch (Exception e) {
            // TODO: handle exception
        }
        return false;

    }
于 2013-05-06T08:55:35.677 回答