我想在Android应用程序的整个运行时检查Internet连接。我尝试过使用服务,但似乎不是最好的选择。我有可能在服务中实现广播接收器吗?或者我是否必须放弃服务并单独使用广播接收器?
答案 0 :(得分:7)
我现在展示如何在服务中创建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
}
}
}
答案 1 :(得分:2)
每秒检查一次连接是不明智的。或者,您可以收听操作( ConnectivityManager.CONNECTIVITY_ACTION ),并确定您是否已连接到活动网络。
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
此外,您可以检查当前活动的网络类型(Type_WIFI,Type_MOBILE)
这样,您不需要每秒都检查连接的服务。
答案 2 :(得分:2)
我希望这link会有所帮助。只是通过它。
答案 3 :(得分:1)
您无需为此目的使用Service
或BroadCastReceiver
。只需检查ping服务器所需的每个时间的连接状态。
您可以编写一个检查此方法的方法,并根据连接状态返回boolean
(true / false)。
以下方法也是如此。
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;
}