Proper way to handle Ip address changes in Android

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Yes indeed the connectivity manager will help.
Take care however it's not so simple to manage. The broadcast event can 
arrive from any network. For example you can get an event on the mobile 
data disconnected after the wifi connected state. The connected even 
also arrives sometimes before dhcp negotiation complete. It's also never 
raised for a VPN connection.
That's why it's necessary to have some dedicated code to treat all of that.
As I said getting inspired of code of Android SIP application could be a 
first step even if they only manage Wifi connectivity. You can also get 
inspired of code of CSipSimple that already manages that and restart or 
just stop the sip stack depending on the new connectivity kind and of 
settings.
The global idea is to always resync with static network state when 
getting this event and to temporise a little before treating a 
connection up event and to treat immediately connection down event.


On 22/08/2012 18:57, Fabian Bernhard wrote:
> Hi,
>
> I agree with R?gis that it is in the responsibility of the the 
> application rather than the SIP stack to act upon network changes.
>
> In your original email you specifically ask about Android and the use 
> case of switching between 3G and WIFI.
>
> Check out Android's ConnectivityManager:
>
> http://developer.android.com/reference/android/net/ConnectivityManager.html
>
> and "Check if Internet access is available on Android":
>
> http://stackoverflow.com/questions/11662707/check-if-internet-access-is-available-on-android
>
> You can create a BroadcastReceiver and listen for network change 
> events, like
>
> @Override
> public void onReceive(Context context, Intent intent) {
>
>     if 
> (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction()) {
>
>         ConnectivityManager manager = (ConnectivityManager) 
> context.getSystemService(Context.CONNECTIVITY_SERVICE);
>         if (manager != null) {
>             NetworkInfo networkInfo = manager.getActiveNetworkInfo();
>             // or
>             NetworkInfo networkInfoWifi = 
> manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
>             // etc...
>             // decide here what to do in which case, e.g. restart the 
> SIP stack in case of network change
>         }
>
>     }
>
> http://developer.android.com/reference/android/content/BroadcastReceiver.html
>
> Hope this helps.
>
> Fabian
>
>
>
> On Wed, Aug 22, 2012 at 6:06 PM, R?gis Montoya <r3gis.3r at gmail.com 
> <mailto:r3gis.3r at gmail.com>> wrote:
>
>     Hi,
>
>     The very first problem is that "Active IP address" is something
>     that doesn't exists. Told like that it makes no sense on any good
>     OS. It's not specific to Android !
>
>     Something important to understand is that an OS can have several
>     IP addresses. Then it's network routes and rules that allows to
>     connect the rest of the universe.
>     So for example if you have two interfaces (wifi + vpn for
>     example), you have at least 2 IP.
>     Besides on recent android phones + recent networks you'll also get
>     ipv6 addresses. So even with one "network" you'll get two
>     addresses. (I obviously exclude loopback address that is again
>     another one).
>     What you could try is to get the ipv4 address of the interface
>     connected to the default gateway. At least with that as target,
>     you are searching something that you can find. (while searching
>     "active ip address" is something that makes no sense). To search
>     the ipv4 address of the interface connected to default gateway
>     several solutions. Maybe with java api, or maybe with network
>     route files.
>     If you have a server address to test it would be easier to open a
>     socket to it and see your local address however (as doing that
>     automatically resolves routes and interfaces).
>
>
>
>
>     On 22/08/2012 17:16, shawn wang wrote:
>>     Hi,R?gis :
>>         Do you know the best way to obtain current active ip address
>>     on Android? Because I have a device
>>     that allow two types of network connected at the same time, then
>>     when iterating networking interface, we
>>     will get two ip addresses, but we don't know which is the one
>>     that is being used by the system.
>>
>>     On Wed, Aug 22, 2012 at 12:32 AM, R?gis Montoya
>>     <r3gis.3r at gmail.com <mailto:r3gis.3r at gmail.com>> wrote:
>>
>>         Hi Shaun,
>>
>>         From my experience on CSipSimple it's not something that is
>>         relevant of the sip stack.
>>         Besides, it's not simple to support on android and may depend
>>         on your approach on that. Depending on whether you'd like to
>>         support VPN connection /for example/ approach will be
>>         different. It will also be different depending on what
>>         android version you'd like to support.
>>         You can get inspired on what's done on Android stock SIP
>>         application... BTW, you'll see it's also not responsibility
>>         of the sip stack but of the sip application to decide whether
>>         to restart or not the sip stack in the implementation from
>>         Google too... so I think that's not a bad idea ;).
>>
>>         Best regards,
>>         R?gis
>>
>>
>>         On 21/08/2012 18:24, Shaun Clark wrote:
>>>         When the Android app goes between wifi and 3g the call does
>>>         not automatically switch, I can call 'n' which re-does the
>>>         NAT, but then looking at this page:
>>>         http://trac.pjsip.org/repos/wiki/IPAddressChange none of
>>>         these approaches seem to work. Since mobile phones often
>>>         switch back and forth between wifi and 3g/mobile this seems
>>>         like a great feature to build into pjsip. Is there a way to
>>>         easily handle this now on Android? Thanks!
>>>
>>>         Shaun
>>>
>>>
>>>         _______________________________________________
>>>         Visit our blog:http://blog.pjsip.org
>>>
>>>         pjsip mailing list
>>>         pjsip at lists.pjsip.org  <mailto:pjsip at lists.pjsip.org>
>>>         http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>
>>
>>         _______________________________________________
>>         Visit our blog: http://blog.pjsip.org
>>
>>         pjsip mailing list
>>         pjsip at lists.pjsip.org <mailto:pjsip at lists.pjsip.org>
>>         http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>
>>
>>
>>
>>     _______________________________________________
>>     Visit our blog:http://blog.pjsip.org
>>
>>     pjsip mailing list
>>     pjsip at lists.pjsip.org  <mailto:pjsip at lists.pjsip.org>
>>     http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>
>
>     _______________________________________________
>     Visit our blog: http://blog.pjsip.org
>
>     pjsip mailing list
>     pjsip at lists.pjsip.org <mailto:pjsip at lists.pjsip.org>
>     http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>
>
>
>
> _______________________________________________
> Visit our blog: http://blog.pjsip.org
>
> pjsip mailing list
> pjsip at lists.pjsip.org
> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20120822/0e126745/attachment-0001.html>


[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux