Parthib Biswas
Parthib Biswas

Reputation: 501

Android App to check if wifi is enabled or not

I've been trying to create an Android app to check if the phone's wifi is turned on or off. What I'm trying to do is, if the WiFi is on, then is shows a BoxLayout which is white in color and if it isn't on, then it shows a Popup. I'm new to Android Development and I got hooked to Kivy because of its simplicity and my love for Python. I tried following Pyjnius docs, but I couldn't get the app to run. So I'll post the code here:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.lang import Builder
from jnius import autoclass

Builder.load_string('''
<WiFiENABLED>
    canvas.before:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size

<WiFiDISABLED>
    BoxLayout:
        orientation: 'vertical'
        Label:
            text:"Wifi is turned off"
        Button:
            text:"OK"

<Box>
    Label:
        text: "WiFi Tester"
''')

class WiFiENABLED(BoxLayout):
    def wfenabled(self):
        pass

class WiFiDISABLED(Popup):
    def wfdisabled(self):
        pass

class WiFiStatus():
    def WiFi(self):
        WiFi_Status = autoclass('android.net.wifi.WiFiManager')
        WiFi = WiFi_Status.getSystemService(Context.WIFI_SERVICE)

        if WiFi.getWifiState() == WiFi.WIFI_STATE_ENABLED:
            return WiFiENABLED()

        elif WiFi.getWifiState() == WiFi.WIFI_STATE_DISABLED:
            return WiFiDISABLED()

class Box(BoxLayout):
    def b(self):
        return WiFiStatus()

class WF(App):
    def build(self):
        return Box()

if __name__ == "__main__":
    WF().run()

And should I make any changes to permissions in builder.spec file? As of now, it is just INTERNET.

Upvotes: 2

Views: 1638

Answers (2)

Mayank Dhiman
Mayank Dhiman

Reputation: 63

This simply worked for me:

from jnius import autoclass

activity = autoclass('org.kivy.android.PythonActivity').mActivity
Context = autoclass('android.content.Context')
ConnectivityManager = autoclass('android.net.ConnectivityManager')

con_mgr = activity.getSystemService(Context.CONNECTIVITY_SERVICE)
conn = con_mgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting()

    if conn:
        print("------------------True")
    else:
        conn = con_mgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting()
        if conn:
            print("------------------True")
        else:
            print("------------------False")

Upvotes: 0

jligeza
jligeza

Reputation: 4693

In my project, I used this function (both for WiFi and mobile internet):

from kivy.utils import platform
from jnius import autoclass


def check_connectivity():
    if platform != 'android':
        raise Exception('run me on android device')

    Activity = autoclass('android.app.Activity')
    PythonActivity = autoclass('org.renpy.android.PythonActivity')
    activity = PythonActivity.mActivity
    ConnectivityManager = autoclass('android.net.ConnectivityManager')

    con_mgr = activity.getSystemService(Activity.CONNECTIVITY_SERVICE)

    conn = con_mgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting()
    if conn:
        return True
    else:
        conn = con_mgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting()
        if conn:
            return True
        else:
            return False

It returns True if internet is available, and False if not.

Upvotes: 4

Related Questions