【发布时间】:2011-06-04 19:38:37
【问题描述】:
我有一个应用程序,我正在尝试检测何时互联网连接出现以及何时消失。
目前,当它出现时,我正在启动一个新线程(不同于 UI),它将我的应用程序连接到远程服务器。
为此,我几乎没有尝试实现 LISTENS 连接的广播接收器,但我在理解这个概念时遇到了问题。
在我的onCreate() 我有类似的东西:
onCreate()
{
cThread = new Thread(new ClientThread(syncToken));
cThread.start();
}
当连接到 Internet 时,我通过套接字发送数据,当没有连接时,我将数据存储在数据库中。当互联网出现时,我正在重新启动线程以重新连接并发送旧数据(由于网络崩溃而未发送)和新数据。
假设我会实现这样的东西:
DoRefreshBroadcastReceiver refreshBroadcastReceiver;
...
onResume() {
// register the refreshing complete broadcast receiver
IntentFilter intentFilter = new IntentFilter(DO_REFRESH);
refreshBroadcastReceiver = new doRefreshBroadcastReceiver();
registerReceiver(refreshBroadcastReceiver, intentFilter);
}
public class DoRefreshBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// call method to run fetch code...
}
}
这是否意味着当检测到 Internet 连接时,我的 onReceive() 会被调用?我可以在那里开始我的线程吗?
使用意图的概念是什么?因为我真的不明白。如何使用它,它的用途是什么?
想法:我真的不知道如何在这种情况下使用此意图或如何在我的应用中使用它!
即使我不在此活动中,这个东西也会检测到 Internet 连接吗?
编辑:
这是我的 onReceive 的样子:
onCreate()
{
cThread = new Thread(new ClientThread(syncToken));
// cThread.start();
connIntentFilter = new IntentFilter(
"android.net.conn.CONNECTIVITY_CHANGE");
connListener = new MyConnectivityListener();
}
public void onReceive(Context context, Intent intent)
{
mNetworkInfo = (NetworkInfo) intent
.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (mNetworkInfo != null && mNetworkInfo.isConnected())
{
/*
* if(mNetworkInfo.getType()==ConnectivityManager.TYPE_WIFI);
*
*
* else
*/
cThread.start();
}
else {
System.out.println("There is no internet connection!");
try {
cThread.stop();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
mNetworkInfo != null && mNetworkInfo.isConnected()
这是否意味着它已连接,还是我应该在模拟器上验证某种类型的连接?
*我认为我应该直接在onReceive() 开始我的线程。我的应用程序一启动它就会检测到 Internet 连接并触发BroadcastReceiver,不是吗?
【问题讨论】:
-
我要求的太多了?
标签: android multithreading broadcastreceiver broadcast