我想在我的 Android 应用程序运行期间检查 Internet 连接。我尝试使用服务,但似乎它不是最好的选择。我有什么可能的方法在服务中实现广播接收器吗?还是我必须放弃服务并单独使用广播接收器?
问问题
9168 次
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
您无需使用Service
或BroadCastReceiver
用于此目的。每次需要 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 回答