I have a problem banning a specific bssid. I can see there is a class called WifiNative that was in api 19 but not able to access it:https://android.googlesource.com/platform/frameworks/base/+/kitkat-release/wifi/java/android/net/wifi/WifiNative.java
Is there any other way anyone knows of to do this? Maybe via JNI? Any android system libraries that can be used? c,c++?
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
newWifiInfo = wifiManager.getConnectionInfo();
from there you can get the BSSID by doing
newWifiInfo.getBSSID()
then "blacklist" by turning off the wifi via
wifiManager.setWifiEnabled(false)
Also don't forget your permissions
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
If you want more control over your wifi state, you can use the following library to "sniff" your connection and other things
https://github.com/pwittchen/ReactiveNetwork
Related
I need to find a way to get the SSID of the network that my Android device is shared (My device is being a portable wifi hotspot).
Not the SSID of the network I connected to.
thanks
I finally found that there are some hidden method about getting/setting wifiAP mode in android WifiManager class. In WifiManager class, getWifiApConfiguration could be invoke to get the configuration in which the SSID of wifiAp could be found.
I know OP has already answered his/her own question, but it wasn't too clear for me, so I'll just post my complete solution here for future people that got here:
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
Method[] methods = wifimanager.getClass().getDeclaredMethods();
for (Method m: methods) {
if (m.getName().equals("getWifiApConfiguration")) {
WifiConfiguration config = (WifiConfiguration)m.invoke(wifimanager);
String ssid = config.SSID;
String bssid = config.BSSID;
//or other info about the current hotspot, accessible through config
}
}
Note: you would need the following permissions:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
I'm trying to get MAC addres of Wifi network of Eclipse android emulator with this:
WifiManager wifiManager = (WifiManager) LoginActivity.this.getSystemService(WIFI_SERVICE);
WifiInfo wInfo = wifiManager.getConnectionInfo();
String macAddress = wInfo.getMacAddress();
System.out.println("HI");
System.out.println(macAddress);
This is the android manifest permissions
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
When the execution arrives to
System.out.println(macAddress);
The app crashes with java nullpointerexception and close it.
What are doing wrong? I have to add wifi conectivity to emulator?
The doc about WifiManager.getConnectionInfo() states that it :
Return dynamic information about the current Wi-Fi connection, if any
is active.
This means that in this case, you'd want to check whether your WifiInfo is not null and that your device is effectively connected to a Wi-Fi network. In the case of the emulator, the MAC address is always null, so you should make sure what you're outputting is valid.
I have used this API to pick the mac address of device,
NetworkInterface.getHardwareAddress()
But this is for API level 9 and later, what should i use to pick the mac address for API level 8? froyo device.
May be this a very simple thing, but i tried googling and couldn't find the answer.
WifiInfo.getMacAddress() has been available since API level 1.
WifiManager wifiMan = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInf = wifiMan.getConnectionInfo();
String macAddr = wifiInf.getMacAddress();
You'll need to add:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
To your manifest
WifiInfo.getMacAddress() always gives you Wi-Fi MAC address although your active interface may be currently cellular. If the intended purpose is to get the associated hardware address (such as from cellular connection), then MAC should be retrieved from rmnet0 interface and so on (if IP/MAC association is required).
I am trying to create a widget for enabling and disabling the wifi.
if(myWifiManager.isWifiEnabled()){
System.out.println("Toggle Wifi Enabled going to disable");
myWifiManager.setWifiEnabled(false);
}
else{
System.out.println("Wifi Disabled going to enable ");
myWifiManager.setWifiEnabled(true);
System.out.println("WI: "+myWifiManager.isWifiEnabled());
}
This is the code i am using the disabling part is working fine but the enabling part is not working fine. Soon after enabling the wifi i am printing the wifi state i am getting it as false.
Here is how to turn on and turn off wifi in android.
First you need to declare the following in your manifest file
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
After doing it that on your Activity class
private WifiManager wifiManager;
#Override
public void onCreate(Bundle icicle) {
....................
wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
if(wifiManager.isWifiEnabled()){
wifiManager.setWifiEnabled(false);
}else{
wifiManager.setWifiEnabled(true);
}
}
Explanation
Get the Wifi service from our system
wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
Check the our wifi is currently turned on or turned off
if(wifiManager.isWifiEnabled()){
Turn on/off our wifi
wifiManager.setWifiEnabled();
Reference
WifiEnabler
http://google-androidlovers.blogspot.com/2012/01/scan-for-wireless-networks-in-android.html
http://www.java2s.com/Open-Source/Android/android-platform-apps/Settings/com/android/settings/wifi/WifiApEnabler.java.htm
Deprecated: Starting with Build.VERSION_CODES#Q, applications are not
allowed to enable/disable Wi-Fi. Compatibility Note: For applications
targeting android.os.Build.VERSION_CODES#Q or above, this API will
always fail and return false. If apps are targeting an older SDK
(android.os.Build.VERSION_CODES#P or below), they can continue to use
this API.
(Source)
So this will only work for devices with android Pie and below.
Download this example it is what you want
https://github.com/siddhpuraamitr/WIfi-Toggle-Widget
I am new to android i stuck for using coding enable location and sectury in that use wireless network enabled so please tell mi how it's possible
thanks
priya naral
From what I gathered, you want to programmatically turn on Wi-Fi.
If so, first you need to add these to your AndroidManifest.xml:
<application>
.
.
.
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
</application>
Then you have the ability to use WifiManager, so your code would look something like the following, where this is your application Context:
WifiManager manager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
if(!manager.isWifiEnabled()){
manager.setWifiEnabled(true);
}