mirror of
https://github.com/zxing/zxing.git
synced 2025-02-02 05:41:08 -08:00
Remove 2 unnecessary wi-fi permissions; thread configuration and wait for wi-fi to enable
git-svn-id: https://zxing.googlecode.com/svn/trunk@1947 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
8d594c783d
commit
468ec159b8
|
@ -167,14 +167,10 @@ versionName is 2.31, 2.4, or 3.0. -->
|
||||||
android:permissionGroup="com.google.zxing.client.android.SHARE_PERMISSIONS"/>
|
android:permissionGroup="com.google.zxing.client.android.SHARE_PERMISSIONS"/>
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
android:permissionGroup="com.google.zxing.client.android.SHARE_PERMISSIONS"/>
|
android:permissionGroup="com.google.zxing.client.android.SHARE_PERMISSIONS"/>
|
||||||
<uses-permission android:name="android.permission.WRITE_SETTINGS"
|
|
||||||
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
|
|
||||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"
|
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"
|
||||||
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
|
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"
|
||||||
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
|
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
|
|
||||||
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
|
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK"
|
<uses-permission android:name="android.permission.WAKE_LOCK"
|
||||||
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
|
android:permissionGroup="com.google.zxing.client.android.WIFI_PERMISSIONS"/>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|
|
@ -18,6 +18,7 @@ package com.google.zxing.client.android.wifi;
|
||||||
|
|
||||||
import android.net.wifi.WifiConfiguration;
|
import android.net.wifi.WifiConfiguration;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -28,30 +29,60 @@ import java.util.regex.Pattern;
|
||||||
*/
|
*/
|
||||||
public final class WifiConfigManager {
|
public final class WifiConfigManager {
|
||||||
|
|
||||||
|
private static final String TAG = WifiConfigManager.class.getSimpleName();
|
||||||
|
|
||||||
private static final Pattern HEX_DIGITS = Pattern.compile("[0-9A-Fa-f]+");
|
private static final Pattern HEX_DIGITS = Pattern.compile("[0-9A-Fa-f]+");
|
||||||
|
|
||||||
private WifiConfigManager() {
|
private WifiConfigManager() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void configure(WifiManager wifiManager, String ssid, String password, String networkTypeString) {
|
public static void configure(final WifiManager wifiManager,
|
||||||
// Start WiFi, otherwise nothing will work
|
final String ssid,
|
||||||
if (!wifiManager.isWifiEnabled()) {
|
final String password,
|
||||||
wifiManager.setWifiEnabled(true);
|
final String networkTypeString) {
|
||||||
}
|
Runnable configureRunnable = new Runnable() {
|
||||||
|
public void run() {
|
||||||
NetworkType networkType = NetworkType.forIntentValue(networkTypeString);
|
// Start WiFi, otherwise nothing will work
|
||||||
if (networkType == NetworkType.NO_PASSWORD) {
|
if (!wifiManager.isWifiEnabled()) {
|
||||||
changeNetworkUnEncrypted(wifiManager, ssid);
|
Log.i(TAG, "Enabling wi-fi...");
|
||||||
} else {
|
if (wifiManager.setWifiEnabled(true)) {
|
||||||
if (password == null || password.length() == 0) {
|
Log.i(TAG, "Wi-fi enabled");
|
||||||
throw new IllegalArgumentException();
|
} else {
|
||||||
|
Log.w(TAG, "Wi-fi could not be enabled!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// This happens very quickly, but need to wait for it to enable. A little busy wait?
|
||||||
|
int count = 0;
|
||||||
|
while (!wifiManager.isWifiEnabled()) {
|
||||||
|
if (count >= 10) {
|
||||||
|
Log.i(TAG, "Took too long to enable wi-fi, quitting");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Log.i(TAG, "Still waiting for wi-fi to enable...");
|
||||||
|
try {
|
||||||
|
Thread.sleep(1000L);
|
||||||
|
} catch (InterruptedException ie) {
|
||||||
|
// continue
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NetworkType networkType = NetworkType.forIntentValue(networkTypeString);
|
||||||
|
if (networkType == NetworkType.NO_PASSWORD) {
|
||||||
|
changeNetworkUnEncrypted(wifiManager, ssid);
|
||||||
|
} else {
|
||||||
|
if (password == null || password.length() == 0) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
if (networkType == NetworkType.WEP) {
|
||||||
|
changeNetworkWEP(wifiManager, ssid, password);
|
||||||
|
} else if (networkType == NetworkType.WPA) {
|
||||||
|
changeNetworkWPA(wifiManager, ssid, password);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (networkType == NetworkType.WEP) {
|
};
|
||||||
changeNetworkWEP(wifiManager, ssid, password);
|
new Thread(configureRunnable).start();
|
||||||
} else if (networkType == NetworkType.WPA) {
|
|
||||||
changeNetworkWPA(wifiManager, ssid, password);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -62,6 +93,7 @@ public final class WifiConfigManager {
|
||||||
private static void updateNetwork(WifiManager wifiManager, WifiConfiguration config) {
|
private static void updateNetwork(WifiManager wifiManager, WifiConfiguration config) {
|
||||||
Integer foundNetworkID = findNetworkInExistingConfig(wifiManager, config.SSID);
|
Integer foundNetworkID = findNetworkInExistingConfig(wifiManager, config.SSID);
|
||||||
if (foundNetworkID != null) {
|
if (foundNetworkID != null) {
|
||||||
|
Log.i(TAG, "Removing old configuration for network " + config.SSID);
|
||||||
wifiManager.removeNetwork(foundNetworkID);
|
wifiManager.removeNetwork(foundNetworkID);
|
||||||
wifiManager.saveConfiguration();
|
wifiManager.saveConfiguration();
|
||||||
}
|
}
|
||||||
|
@ -69,8 +101,12 @@ public final class WifiConfigManager {
|
||||||
if (networkId >= 0) {
|
if (networkId >= 0) {
|
||||||
// Try to disable the current network and start a new one.
|
// Try to disable the current network and start a new one.
|
||||||
if (wifiManager.enableNetwork(networkId, true)) {
|
if (wifiManager.enableNetwork(networkId, true)) {
|
||||||
wifiManager.reassociate();
|
Log.i(TAG, "Associating to network " + config.SSID);
|
||||||
|
} else {
|
||||||
|
Log.w(TAG, "Failed to enable network " + config.SSID);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Log.w(TAG, "Unable to add network " + config.SSID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue