Android 在服务内部实现广播接收器
我想在我的Android应用程序运行期间检查互联网连接。我尝试使用服务,但似乎这不是最好的选择。我是否有任何可能的方法在服务中实现广播接收器?或者我必须放弃该服务而单独使用广播接收器吗?我将向您展示如何在服务中创建SMS接收器:Android 在服务内部实现广播接收器,android,service,broadcastreceiver,internet-connection,Android,Service,Broadcastreceiver,Internet Connection,我想在我的Android应用程序运行期间检查互联网连接。我尝试使用服务,但似乎这不是最好的选择。我是否有任何可能的方法在服务中实现广播接收器?或者我必须放弃该服务而单独使用广播接收器吗?我将向您展示如何在服务中创建SMS接收器: public class MyService extends Service { @Override public void onCreate() { BwlLog.begin(TAG); super.onCreate(); SMSrecei
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
}
}
}
您无需为此使用
服务
或广播接收器
。每次需要ping服务器时,只需检查连接状态
您可以编写一个方法来检查这一点,并根据连接状态返回一个布尔值(真/假)。
下面的方法也是如此
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;
}
每秒钟检查一次连接是不明智的。或者,您可以收听操作(ConnectivityManager.CONNECTIVITY\u操作)并确定是否连接到活动网络
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
此外,您还可以检查当前活动的网络类型(WIFI类型、MOBILE类型)
这样,您就不需要每秒都在检查连接的服务。为什么要使用连接签入服务?为什么不在每个http/https请求上发表评论呢?谢谢@Pankaj Kumar;实际上它是在线流媒体,所以需要保持每秒检查连接感谢@AndroidEnthusiast;在我的代码中,我总是使用internet连接,实际上它是在线流媒体,所以需要保持每秒检查连接,我将尝试使用此结构。。谢谢一个lot真的很有用谢谢我也需要在清单文件中声明我的接收人吗?@Alexanchez你不需要在最主要的文件中声明它好的,我知道我在这里问得很晚了,但是如果我需要将onReceive的结果发送回服务怎么办?我一直在努力解决这个问题,运气不好!我想这会有帮助。如果您能让我参考一些示例代码,这将更有帮助。谢谢你会参考这个,非常感谢