Android:检查互联网连接的服务内部,并等到互联网连接建立
问题描述:
public class FBPost extends Service{
private Bundle params = new Bundle();
private String userID="";
String response;
public void onCreate(String userID,String name)
{
super.onCreate();
params.putString("message", "Test " + new Date().toLocaleString());
params.putString("caption", "Hey there");
this.userID=userID;
}
@Override
public int onStartCommand(Intent intent , int flags , int startId)
{
if(checkInternetConnection())
{
fb_post();
return 0;
}
else
{
BroadcastReceiver connec_recv= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(checkInternetConnection())
fb_post();
}
};
final IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connec_recv, intentFilter);
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
private boolean checkInternetConnection() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// test for connection
if (cm.getActiveNetworkInfo() != null
&& cm.getActiveNetworkInfo().isAvailable()
&& cm.getActiveNetworkInfo().isConnected()) {
try{
URL url = new URL("http://www.google.com");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
in.close();
return true;
} catch (Exception e) {
return false;
}
}
return false;
}
private void fb_post()
{
//MORE CODE
}
}
如果仍然没有互联网连接性,该怎么办?我应该从广播接收者而不是fb_post()调用另一个相同服务的实例吗?每当连接广播接收器收到连接更改广播时,是否可以等待服务(),然后通知()?Android:检查互联网连接的服务内部,并等到互联网连接建立
答
在我看来实现这种功能的正确方法如下:
- 如果没有连接 - 放弃
Service
,注册BroadcastReceiver
侦听连接变化和保存标志的地方(SharedPreferences
例如)告知有工作剩下要做 - 当连接建立后,你的标志是
true
- 重新开始Service
和做的工作
希望这会有所帮助。
对不起,有点忘了我的问题。那么,我不能在广播接收机中再次拨打该服务?但是我只能有一个服务实例,那么这是否意味着在这个服务完成之前没有其他FBPosts可以通过?或者我会得到服务泄漏? – Anmol 2012-07-23 21:10:07
@Anmol,如果没有连接并且无法完成任务,则应该停止服务。没有进一步运行的感觉。 – Egor 2012-07-24 07:22:00