Reputation: 501
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
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
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