У меня есть приложение, в котором я пытаюсь обнаружить КОГДА Интернет-соединение появляется и когда оно исчезает.
В тот момент, когда он появляется, я запускаю новый поток (отличный от пользовательского интерфейса), который подключает мое приложение к удаленному серверу.
Для этого я с трудом пытаюсь реализовать вещательный приемник, который СЛУШАЕТ для подключения, но у меня возникают проблемы с пониманием концепции.
В моем onCreate()
есть что-то вроде:
onCreate()
{
cThread = new Thread(new ClientThread(syncToken));
cThread.start();
}
Когда есть подключение к Интернету, я отправляю данные через сокет, когда нет, я храню данные в базе данных. И когда появляется Интернет, я перезагружаю свой поток для повторного подключения и отправки старых данных (которые не были отправлены из-за сбоя сети) и новых.
Допустим, я бы реализовал что-то вроде этого:
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...
}
}
Означает ли это, что при обнаружении интернет-соединения вызывается мой onReceive()
? И я мог бы начать свою нить там?
Какова концепция использования намерения? Потому что я действительно не понимаю. Как его использовать и каково его назначение?
ИДЕЯ: Я действительно не знаю, как использовать это намерение в этом случае или как использовать его в моем приложении!
Обнаружит ли эта вещь соединение с Интернетом, даже когда я не в этой деятельности?
EDIT:
Вот как выглядит мой 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()
. Как только мое приложение запускается, оно обнаруживает подключение к Интернету и BroadcastReceiver
срабатывает, не так ли?