123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- package com.epson.mobilephone.common.wifidirect;
- import android.annotation.TargetApi;
- import android.app.Service;
- import android.content.Context;
- import android.content.Intent;
- import android.net.ConnectivityManager;
- import android.net.Network;
- import android.net.NetworkCapabilities;
- import android.net.NetworkRequest;
- import android.net.Uri;
- import android.net.wifi.WifiManager;
- import android.os.Build;
- import android.provider.Settings;
- import com.google.api.client.http.HttpMethods;
- import com.google.common.net.HttpHeaders;
- import org.opencv.videoio.Videoio;
- import java.io.IOException;
- import java.net.HttpURLConnection;
- import java.net.URL;
- @TargetApi(21)
- public class ManageDefaultNetwork {
- private static final String CHECKURL = "http://epson.com";
- private static final String TAG = "ManageDefaultNetwork";
- private static final int TIMEOUT_CHECKURL = 5000;
- private static ManageDefaultNetwork manageDefaultNetwork;
- volatile boolean canConnected = false;
- private String checkedSSID = null;
- private ConnectivityManager connectivityManager = null;
- private boolean isOnline = false;
- private volatile Object lock = new Object();
- private Context mContext = null;
- private ManageDefaultNetworkCallback manageDefaultNetworkCallback = null;
- private WifiManager wifiManager = null;
- private ManageDefaultNetwork(Context context) {
- mContext = context.getApplicationContext();
- connectivityManager = (ConnectivityManager) mContext.getSystemService(Service.CONNECTIVITY_SERVICE);
- wifiManager = (WifiManager) mContext.getSystemService(Service.WIFI_SERVICE);
- }
- public static ManageDefaultNetwork getInstance(Context context) {
- ManageDefaultNetwork manageDefaultNetwork2 = manageDefaultNetwork;
- if (manageDefaultNetwork2 != null) {
- return manageDefaultNetwork2;
- }
- manageDefaultNetwork = new ManageDefaultNetwork(context);
- return manageDefaultNetwork;
- }
- private synchronized boolean checkCurSSIDisOnline(String str) {
- boolean z;
- Network activeNetwork;
- NetworkCapabilities networkCapabilities;
- canConnected = false;
- if (WiFiControl.isSimpleAP(str)) {
- return false;
- }
- if (Build.VERSION.SDK_INT < 23 || (activeNetwork = connectivityManager.getActiveNetwork()) == null || (networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork)) == null || !networkCapabilities.hasTransport(0)) {
- synchronized (lock) {
- EPLog.d(TAG, "Checking whether isOnline : " + str);
- new Thread(new Runnable() {
- public void run() {
- try {
- HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(ManageDefaultNetwork.CHECKURL).openConnection();
- httpURLConnection.setRequestMethod(HttpMethods.HEAD);
- httpURLConnection.setUseCaches(false);
- httpURLConnection.setRequestProperty(HttpHeaders.CONNECTION, "close");
- httpURLConnection.setConnectTimeout(5000);
- httpURLConnection.connect();
- int responseCode = httpURLConnection.getResponseCode();
- EPLog.d(ManageDefaultNetwork.TAG, "getResponseCode() : " + responseCode);
- httpURLConnection.disconnect();
- if (responseCode > 0) {
- canConnected = true;
- }
- } catch (IOException unused) {
- EPLog.e(ManageDefaultNetwork.TAG, "HttpURLConnection failed");
- canConnected = false;
- }
- synchronized (lock) {
- try {
- lock.notifyAll();
- } catch (IllegalMonitorStateException e) {
- e.printStackTrace();
- }
- }
- }
- }).start();
- try {
- lock.wait(10000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- z = canConnected;
- }
- return z;
- }
- EPLog.d(TAG, "WiFi connected, But default network is cellular. " + str + "is offline.");
- return false;
- }
- public synchronized void setDefaultNetworkSimpleAp() {
- if (Build.VERSION.SDK_INT >= 21) {
- String curSSID = WiFiUtils.getInstance(mContext).getCurSSID();
- if (curSSID == null) {
- EPLog.d(TAG, "Not connected");
- return;
- }
- if (!curSSID.equals(checkedSSID)) {
- checkedSSID = curSSID;
- isOnline = checkCurSSIDisOnline(curSSID);
- if (isOnline) {
- EPLog.d(TAG, curSSID + "is online.");
- return;
- }
- } else if (isOnline) {
- EPLog.d(TAG, curSSID + "is online.");
- return;
- }
- if (Build.VERSION.SDK_INT >= 23) {
- if (connectivityManager.getBoundNetworkForProcess() != null) {
- EPLog.d(TAG, "Already bindProcessToNetwork called");
- return;
- }
- } else if (Build.VERSION.SDK_INT >= 21) {
- ConnectivityManager connectivityManager2 = connectivityManager;
- if (ConnectivityManager.getProcessDefaultNetwork() != null) {
- EPLog.d(TAG, "Already setProcessDefaultNetwork called");
- return;
- }
- } else {
- return;
- }
- NetworkRequest.Builder builder = new NetworkRequest.Builder();
- builder.removeCapability(12);
- builder.addTransportType(1);
- try {
- if (manageDefaultNetworkCallback == null) {
- manageDefaultNetworkCallback = new ManageDefaultNetworkCallback();
- }
- connectivityManager.requestNetwork(builder.build(), manageDefaultNetworkCallback);
- } catch (SecurityException e) {
- e.printStackTrace();
- if (Build.VERSION.SDK_INT >= 23) {
- try {
- if (!Settings.System.canWrite(mContext)) {
- Intent intent = new Intent("android.settings.action.MANAGE_WRITE_SETTINGS");
- intent.setFlags(Videoio.CAP_INTELPERC_IMAGE_GENERATOR);
- intent.setData(Uri.parse("package:" + mContext.getPackageName()));
- mContext.startActivity(intent);
- return;
- }
- } catch (Exception e2) {
- e2.printStackTrace();
- }
- }
- } catch (Exception e3) {
- e3.printStackTrace();
- }
- } else {
- return;
- }
- return;
- }
- public synchronized void resetDefaultNetwork() {
- if (Build.VERSION.SDK_INT >= 23) {
- if (connectivityManager.getBoundNetworkForProcess() != null) {
- EPLog.d(TAG, "resetProcessDefaultNetwork");
- connectivityManager.bindProcessToNetwork((Network) null);
- }
- } else if (Build.VERSION.SDK_INT >= 21) {
- ConnectivityManager connectivityManager2 = connectivityManager;
- if (ConnectivityManager.getProcessDefaultNetwork() != null) {
- EPLog.d(TAG, "resetProcessDefaultNetwork");
- ConnectivityManager connectivityManager3 = connectivityManager;
- ConnectivityManager.setProcessDefaultNetwork((Network) null);
- }
- } else {
- return;
- }
- try {
- if (manageDefaultNetworkCallback != null) {
- connectivityManager.unregisterNetworkCallback(manageDefaultNetworkCallback);
- manageDefaultNetworkCallback = null;
- }
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (Exception e2) {
- e2.printStackTrace();
- }
- }
- class ManageDefaultNetworkCallback extends ConnectivityManager.NetworkCallback {
- ManageDefaultNetworkCallback() {
- }
- public void onAvailable(Network network) {
- EPLog.d(ManageDefaultNetwork.TAG, "Call onAvailable");
- super.onAvailable(network);
- if (Build.VERSION.SDK_INT < 23) {
- ConnectivityManager unused = connectivityManager;
- if (ConnectivityManager.getProcessDefaultNetwork() == null) {
- ConnectivityManager unused2 = connectivityManager;
- if (ConnectivityManager.setProcessDefaultNetwork(network)) {
- EPLog.d(ManageDefaultNetwork.TAG, "setProcessDefaultNetwork");
- }
- }
- } else if (connectivityManager.getBoundNetworkForProcess() == null && connectivityManager.bindProcessToNetwork(network)) {
- EPLog.d(ManageDefaultNetwork.TAG, "bindProcessToNetwork");
- }
- }
- public void onLost(Network network) {
- EPLog.d(ManageDefaultNetwork.TAG, "Call onLost");
- super.onLost(network);
- resetDefaultNetwork();
- }
- }
- }
|