Repository: GuoZhaoHui628/WifiListConnect
Branch: master
Commit: 49173657a939
Files: 38
Total size: 63.1 KB
Directory structure:
gitextract_qc8r63kf/
├── .gitignore
├── .idea/
│ ├── compiler.xml
│ ├── copyright/
│ │ └── profiles_settings.xml
│ ├── gradle.xml
│ ├── inspectionProfiles/
│ │ ├── Project_Default.xml
│ │ └── profiles_settings.xml
│ ├── misc.xml
│ ├── modules.xml
│ ├── runConfigurations.xml
│ ├── smartfox_info.xml
│ └── vcs.xml
├── README.md
├── app/
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src/
│ ├── androidTest/
│ │ └── java/
│ │ └── guo/
│ │ └── wifilistconnect/
│ │ └── ExampleInstrumentedTest.java
│ ├── main/
│ │ ├── AndroidManifest.xml
│ │ ├── java/
│ │ │ └── guo/
│ │ │ └── wifilistconnect/
│ │ │ ├── MainActivity.java
│ │ │ ├── WifiSupport.java
│ │ │ ├── adapter/
│ │ │ │ └── WifiListAdapter.java
│ │ │ ├── app/
│ │ │ │ └── AppContants.java
│ │ │ ├── bean/
│ │ │ │ └── WifiBean.java
│ │ │ ├── dialog/
│ │ │ │ └── WifiLinkDialog.java
│ │ │ └── utils/
│ │ │ └── CollectionUtils.java
│ │ └── res/
│ │ ├── layout/
│ │ │ ├── activity_main.xml
│ │ │ ├── item_wifi_list.xml
│ │ │ └── setting_wifi_link_dialog.xml
│ │ └── values/
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test/
│ └── java/
│ └── guo/
│ └── wifilistconnect/
│ └── ExampleUnitTest.java
├── build.gradle
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild
================================================
FILE: .idea/compiler.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="!?*.java" />
<entry name="!?*.form" />
<entry name="!?*.class" />
<entry name="!?*.groovy" />
<entry name="!?*.scala" />
<entry name="!?*.flex" />
<entry name="!?*.kt" />
<entry name="!?*.clj" />
<entry name="!?*.aj" />
</wildcardResourcePatterns>
<annotationProcessing>
<profile default="true" name="Default" enabled="false">
<processorPath useClasspath="true" />
</profile>
</annotationProcessing>
</component>
</project>
================================================
FILE: .idea/copyright/profiles_settings.xml
================================================
<component name="CopyrightManager">
<settings default="" />
</component>
================================================
FILE: .idea/gradle.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
================================================
FILE: .idea/inspectionProfiles/Project_Default.xml
================================================
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AliAccessStaticViaInstance" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliAccessToNonThreadSafeStaticFieldFromInstance" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AliArrayNamingShouldHaveBracket" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AliControlFlowStatementWithoutBraces" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliDeprecation" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AliEqualsAvoidNull" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AliLongLiteralsEndingWithLowercaseL" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliMissingOverrideAnnotation" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AliWrapperTypeEquality" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAbstractClassShouldStartWithAbstractNaming" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAbstractMethodOrInterfaceMethodMustUseJavadoc" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidApacheBeanUtilsCopy" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidCommentBehindStatement" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidComplexCondition" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidConcurrentCompetitionRandom" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidManuallyCreateThread" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidMissUseOfMathRandom" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidNewDateGetTime" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidPatternCompileInMethod" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidReturnInFinally" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidStartWithDollarAndUnderLineNaming" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaAvoidUseTimer" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaBooleanPropertyShouldNotStartWithIs" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaClassCastExceptionWithSubListToArrayList" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaClassCastExceptionWithToArray" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaClassMustHaveAuthor" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaClassNamingShouldBeCamel" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaCollectionInitShouldAssignCapacity" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaCommentsMustBeJavadocFormat" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaConcurrentExceptionWithModifyOriginSubList" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaConstantFieldShouldBeUpperCase" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaCountDownShouldInFinally" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaDontModifyInForeachCircle" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaEnumConstantsMustHaveComment" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaExceptionClassShouldEndWithException" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaIbatisMethodQueryForList" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaLowerCamelCaseVariableNaming" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaMethodReturnWrapperType" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPackageNaming" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPojoMustOverrideToString" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPojoMustUsePrimitiveField" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaPojoNoDefaultValue" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaRemoveCommentedCode" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaServiceOrDaoClassShouldEndWithImpl" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaStringConcat" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaSwitchStatement" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaTestClassShouldEndWithTestNaming" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaThreadLocalShouldRemove" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaThreadPoolCreation" enabled="true" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="AlibabaThreadShouldSetName" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaTransactionMustHaveRollback" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaUndefineMagicConstant" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AlibabaUnsupportedExceptionWithModifyAsList" enabled="true" level="CRITICAL" enabled_by_default="false" />
<inspection_tool class="AlibabaUseQuietReferenceNotation" enabled="true" level="MAJOR" enabled_by_default="false" />
<inspection_tool class="AndroidLintProtectedPermissions" enabled="false" level="ERROR" enabled_by_default="false" />
<inspection_tool class="LoggerInitializedWithForeignClass" enabled="false" level="WARNING" enabled_by_default="false">
<option name="loggerClassName" value="org.apache.log4j.Logger,org.slf4j.LoggerFactory,org.apache.commons.logging.LogFactory,java.util.logging.Logger" />
<option name="loggerFactoryMethodName" value="getLogger,getLogger,getLog,getLogger" />
</inspection_tool>
<inspection_tool class="MapOrSetKeyShouldOverrideHashCodeEquals" enabled="true" level="CRITICAL" enabled_by_default="false" />
</profile>
</component>
================================================
FILE: .idea/inspectionProfiles/profiles_settings.xml
================================================
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="Project Default" />
<option name="USE_PROJECT_PROFILE" value="true" />
<version value="1.0" />
</settings>
</component>
================================================
FILE: .idea/misc.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="android.support.annotation.Nullable" />
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="4">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
<component name="masterDetails">
<states>
<state key="ProjectJDKs.UI">
<settings>
<last-edited>Android API 22 Platform</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
</project>
================================================
FILE: .idea/modules.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/WifiListConnect.iml" filepath="$PROJECT_DIR$/WifiListConnect.iml" />
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
</modules>
</component>
</project>
================================================
FILE: .idea/runConfigurations.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
</set>
</option>
</component>
</project>
================================================
FILE: .idea/smartfox_info.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SmartFoxProjectConfig">
<option name="projectInspectionClosed" value="true" />
</component>
</project>
================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
================================================
FILE: README.md
================================================
# WifiListConnect
<b>定期分享国内外别人家技术赚钱的案例,希望能给你启发。可以关注一波 保证不坑,坑了取消就是啦 :) </b>
### 最新分享
【案例】这些日赚上万美金Youtube油管从业者 技术人的福音 https://www.jianshu.com/p/18a25b4dcd40
<br/>
【案例】FFMPEG大神的机会 一套油管自动生产视频赚钱方法详解 [https://guozh.net/anlibierenmai1000daoyitaoyouguanzidongshengchanshipinzhuanqian/](https://guozh.net/anlibierenmai1000daoyitaoyouguanzidongshengchanshipinzhuanqian/)
<br/>
【案例】FFMPEG GIF音乐搞笑视频自动生成 内含视频体验 [https://guozh.net/youtube-funny-gif-auto-product-make-money/](https://guozh.net/youtube-funny-gif-auto-product-make-money/)
<br/>

<br/>
适配android6.0 获取wifi 列表,连接wifi
## 效果图


## 详情
[csdn博客](http://blog.csdn.net/guozhaohui628/article/details/78644150)
<br/>
如果帮到你了给个star支持下,谢谢了
================================================
FILE: app/.gitignore
================================================
/build
================================================
FILE: app/build.gradle
================================================
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
applicationId "guo.wifilistconnect"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:26.+'
compile 'com.android.support:recyclerview-v7:24.1.1'
}
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in D:\MyDownLoad\as\android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
================================================
FILE: app/src/androidTest/java/guo/wifilistconnect/ExampleInstrumentedTest.java
================================================
package guo.wifilistconnect;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumentation test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("guo.wifilistconnect", appContext.getPackageName());
}
}
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="guo.wifilistconnect">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
================================================
FILE: app/src/main/java/guo/wifilistconnect/MainActivity.java
================================================
package guo.wifilistconnect;
import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import guo.wifilistconnect.adapter.WifiListAdapter;
import guo.wifilistconnect.app.AppContants;
import guo.wifilistconnect.bean.WifiBean;
import guo.wifilistconnect.dialog.WifiLinkDialog;
import guo.wifilistconnect.utils.CollectionUtils;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
//权限请求码
private static final int PERMISSION_REQUEST_CODE = 0;
//两个危险权限需要动态申请
private static final String[] NEEDED_PERMISSIONS = new String[]{
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
};
private boolean mHasPermission;
ProgressBar pbWifiLoading;
List<WifiBean> realWifiList = new ArrayList<>();
private WifiListAdapter adapter;
private RecyclerView recyWifiList;
private WifiBroadcastReceiver wifiReceiver;
private int connectType = 0;//1:连接成功? 2 正在连接(如果wifi热点列表发生变需要该字段)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pbWifiLoading = (ProgressBar) this.findViewById(R.id.pb_wifi_loading);
hidingProgressBar();
mHasPermission = checkPermission();
if (!mHasPermission && WifiSupport.isOpenWifi(MainActivity.this)) { //未获取权限,申请权限
requestPermission();
}else if(mHasPermission && WifiSupport.isOpenWifi(MainActivity.this)){ //已经获取权限
initRecycler();
}else{
Toast.makeText(MainActivity.this,"WIFI处于关闭状态",Toast.LENGTH_SHORT).show();
}
}
private void initRecycler() {
recyWifiList = (RecyclerView) this.findViewById(R.id.recy_list_wifi);
adapter = new WifiListAdapter(this,realWifiList);
recyWifiList.setLayoutManager(new LinearLayoutManager(this));
recyWifiList.setAdapter(adapter);
if(WifiSupport.isOpenWifi(MainActivity.this) && mHasPermission){
sortScaResult();
}else{
Toast.makeText(MainActivity.this,"WIFI处于关闭状态或权限获取失败22222",Toast.LENGTH_SHORT).show();
}
adapter.setOnItemClickListener(new WifiListAdapter.onItemClickListener() {
@Override
public void onItemClick(View view, int postion, Object o) {
WifiBean wifiBean = realWifiList.get(postion);
if(wifiBean.getState().equals(AppContants.WIFI_STATE_UNCONNECT) || wifiBean.getState().equals(AppContants.WIFI_STATE_CONNECT)){
String capabilities = realWifiList.get(postion).getCapabilities();
if(WifiSupport.getWifiCipher(capabilities) == WifiSupport.WifiCipherType.WIFICIPHER_NOPASS){//无需密码
WifiConfiguration tempConfig = WifiSupport.isExsits(wifiBean.getWifiName(),MainActivity.this);
if(tempConfig == null){
WifiConfiguration exsits = WifiSupport.createWifiConfig(wifiBean.getWifiName(), null, WifiSupport.WifiCipherType.WIFICIPHER_NOPASS);
WifiSupport.addNetWork(exsits, MainActivity.this);
}else{
WifiSupport.addNetWork(tempConfig, MainActivity.this);
}
}else{ //需要密码,弹出输入密码dialog
noConfigurationWifi(postion);
}
}
}
});
}
private void noConfigurationWifi(int position) {//之前没配置过该网络, 弹出输入密码界面
WifiLinkDialog linkDialog = new WifiLinkDialog(this,R.style.dialog_download,realWifiList.get(position).getWifiName(), realWifiList.get(position).getCapabilities());
if(!linkDialog.isShowing()){
linkDialog.show();
}
}
@Override
protected void onResume() {
super.onResume();
//注册广播
wifiReceiver = new WifiBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);//监听wifi是开关变化的状态
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);//监听wifi连接状态广播,是否连接了一个有效路由
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);//监听wifi列表变化(开启一个热点或者关闭一个热点)
this.registerReceiver(wifiReceiver, filter);
}
@Override
protected void onPause() {
super.onPause();
this.unregisterReceiver(wifiReceiver);
}
//监听wifi状态
public class WifiBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())){
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
switch (state){
/**
* WIFI_STATE_DISABLED WLAN已经关闭
* WIFI_STATE_DISABLING WLAN正在关闭
* WIFI_STATE_ENABLED WLAN已经打开
* WIFI_STATE_ENABLING WLAN正在打开
* WIFI_STATE_UNKNOWN 未知
*/
case WifiManager.WIFI_STATE_DISABLED:{
Log.d(TAG,"已经关闭");
Toast.makeText(MainActivity.this,"WIFI处于关闭状态",Toast.LENGTH_SHORT).show();
break;
}
case WifiManager.WIFI_STATE_DISABLING:{
Log.d(TAG,"正在关闭");
break;
}
case WifiManager.WIFI_STATE_ENABLED:{
Log.d(TAG,"已经打开");
sortScaResult();
break;
}
case WifiManager.WIFI_STATE_ENABLING:{
Log.d(TAG,"正在打开");
break;
}
case WifiManager.WIFI_STATE_UNKNOWN:{
Log.d(TAG,"未知状态");
break;
}
}
}else if(WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())){
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
Log.d(TAG, "--NetworkInfo--" + info.toString());
if(NetworkInfo.State.DISCONNECTED == info.getState()){//wifi没连接上
Log.d(TAG,"wifi没连接上");
hidingProgressBar();
for(int i = 0;i < realWifiList.size();i++){//没连接上将 所有的连接状态都置为“未连接”
realWifiList.get(i).setState(AppContants.WIFI_STATE_UNCONNECT);
}
adapter.notifyDataSetChanged();
}else if(NetworkInfo.State.CONNECTED == info.getState()){//wifi连接上了
Log.d(TAG,"wifi连接上了");
hidingProgressBar();
WifiInfo connectedWifiInfo = WifiSupport.getConnectedWifiInfo(MainActivity.this);
//连接成功 跳转界面 传递ip地址
Toast.makeText(MainActivity.this,"wifi连接上了",Toast.LENGTH_SHORT).show();
connectType = 1;
wifiListSet(connectedWifiInfo.getSSID(),connectType);
}else if(NetworkInfo.State.CONNECTING == info.getState()){//正在连接
Log.d(TAG,"wifi正在连接");
showProgressBar();
WifiInfo connectedWifiInfo = WifiSupport.getConnectedWifiInfo(MainActivity.this);
connectType = 2;
wifiListSet(connectedWifiInfo.getSSID(),connectType );
}
}else if(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())){
Log.d(TAG,"网络列表变化了");
wifiListChange();
}
}
}
/**
* //网络状态发生改变 调用此方法!
*/
public void wifiListChange(){
sortScaResult();
WifiInfo connectedWifiInfo = WifiSupport.getConnectedWifiInfo(this);
if(connectedWifiInfo != null){
wifiListSet(connectedWifiInfo.getSSID(),connectType);
}
}
/**
* 将"已连接"或者"正在连接"的wifi热点放置在第一个位置
* @param wifiName
* @param type
*/
public void wifiListSet(String wifiName , int type){
int index = -1;
WifiBean wifiInfo = new WifiBean();
if(CollectionUtils.isNullOrEmpty(realWifiList)){
return;
}
for(int i = 0;i < realWifiList.size();i++){
realWifiList.get(i).setState(AppContants.WIFI_STATE_UNCONNECT);
}
Collections.sort(realWifiList);//根据信号强度排序
for(int i = 0;i < realWifiList.size();i++){
WifiBean wifiBean = realWifiList.get(i);
if(index == -1 && ("\"" + wifiBean.getWifiName() + "\"").equals(wifiName)){
index = i;
wifiInfo.setLevel(wifiBean.getLevel());
wifiInfo.setWifiName(wifiBean.getWifiName());
wifiInfo.setCapabilities(wifiBean.getCapabilities());
if(type == 1){
wifiInfo.setState(AppContants.WIFI_STATE_CONNECT);
}else{
wifiInfo.setState(AppContants.WIFI_STATE_ON_CONNECTING);
}
}
}
if(index != -1){
realWifiList.remove(index);
realWifiList.add(0, wifiInfo);
adapter.notifyDataSetChanged();
}
}
/**
* 检查是否已经授予权限
* @return
*/
private boolean checkPermission() {
for (String permission : NEEDED_PERMISSIONS) {
if (ActivityCompat.checkSelfPermission(this, permission)
!= PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
/**
* 申请权限
*/
private void requestPermission() {
ActivityCompat.requestPermissions(this,
NEEDED_PERMISSIONS, PERMISSION_REQUEST_CODE);
}
/**
* 获取wifi列表然后将bean转成自己定义的WifiBean
*/
public void sortScaResult(){
List<ScanResult> scanResults = WifiSupport.noSameName(WifiSupport.getWifiScanResult(this));
realWifiList.clear();
if(!CollectionUtils.isNullOrEmpty(scanResults)){
for(int i = 0;i < scanResults.size();i++){
WifiBean wifiBean = new WifiBean();
wifiBean.setWifiName(scanResults.get(i).SSID);
wifiBean.setState(AppContants.WIFI_STATE_UNCONNECT); //只要获取都假设设置成未连接,真正的状态都通过广播来确定
wifiBean.setCapabilities(scanResults.get(i).capabilities);
wifiBean.setLevel(WifiSupport.getLevel(scanResults.get(i).level)+"");
realWifiList.add(wifiBean);
//排序
Collections.sort(realWifiList);
adapter.notifyDataSetChanged();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean hasAllPermission = true;
if (requestCode == PERMISSION_REQUEST_CODE) {
for (int i : grantResults) {
if (i != PackageManager.PERMISSION_GRANTED) {
hasAllPermission = false; //判断用户是否同意获取权限
break;
}
}
//如果同意权限
if (hasAllPermission) {
mHasPermission = true;
if(WifiSupport.isOpenWifi(MainActivity.this) && mHasPermission){ //如果wifi开关是开 并且 已经获取权限
initRecycler();
}else{
Toast.makeText(MainActivity.this,"WIFI处于关闭状态或权限获取失败1111",Toast.LENGTH_SHORT).show();
}
} else { //用户不同意权限
mHasPermission = false;
Toast.makeText(MainActivity.this,"获取权限失败",Toast.LENGTH_SHORT).show();
}
}
}
public void showProgressBar() {
pbWifiLoading.setVisibility(View.VISIBLE);
}
public void hidingProgressBar() {
pbWifiLoading.setVisibility(View.GONE);
}
}
================================================
FILE: app/src/main/java/guo/wifilistconnect/WifiSupport.java
================================================
package guo.wifilistconnect;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.text.TextUtils;
import java.util.ArrayList;
import java.util.List;
import guo.wifilistconnect.bean.WifiBean;
/**
* Created by ${GuoZhaoHui} on 2017/11/27.
* Email:guozhaohui628@gmail.com
*/
public class WifiSupport {
private static final String TAG = "WifiSupport";
public enum WifiCipherType {
WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID
}
public WifiSupport() {
}
public static List<ScanResult> getWifiScanResult(Context context) {
boolean b = context == null;
return ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getScanResults();
}
public static boolean isWifiEnable(Context context) {
return ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).isWifiEnabled();
}
public static WifiInfo getConnectedWifiInfo(Context context) {
return ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getConnectionInfo();
}
public static List getConfigurations(Context context) {
return ((WifiManager) context.getSystemService(Context.WIFI_SERVICE)).getConfiguredNetworks();
}
public static WifiConfiguration createWifiConfig(String SSID, String password, WifiCipherType type) {
WifiConfiguration config = new WifiConfiguration();
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID = "\"" + SSID + "\"";
if (type == WifiCipherType.WIFICIPHER_NOPASS) {
// config.wepKeys[0] = ""; //注意这里
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
// config.wepTxKeyIndex = 0;
}
if (type == WifiCipherType.WIFICIPHER_WEP) {
config.preSharedKey = "\"" + password + "\"";
config.hiddenSSID = true;
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex = 0;
}
if (type == WifiCipherType.WIFICIPHER_WPA) {
config.preSharedKey = "\"" + password + "\"";
config.hiddenSSID = true;
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
config.status = WifiConfiguration.Status.ENABLED;
}
return config;
}
/**
* 接入某个wifi热点
*/
public static boolean addNetWork(WifiConfiguration config, Context context) {
WifiManager wifimanager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiinfo = wifimanager.getConnectionInfo();
if (null != wifiinfo) {
wifimanager.disableNetwork(wifiinfo.getNetworkId());
}
boolean result = false;
if (config.networkId > 0) {
result = wifimanager.enableNetwork(config.networkId, true);
wifimanager.updateNetwork(config);
} else {
int i = wifimanager.addNetwork(config);
result = false;
if (i > 0) {
wifimanager.saveConfiguration();
return wifimanager.enableNetwork(i, true);
}
}
return result;
}
/**
* 判断wifi热点支持的加密方式
*/
public static WifiCipherType getWifiCipher(String s) {
if (s.isEmpty()) {
return WifiCipherType.WIFICIPHER_INVALID;
} else if (s.contains("WEP")) {
return WifiCipherType.WIFICIPHER_WEP;
} else if (s.contains("WPA") || s.contains("WPA2") || s.contains("WPS")) {
return WifiCipherType.WIFICIPHER_WPA;
} else {
return WifiCipherType.WIFICIPHER_NOPASS;
}
}
//查看以前是否也配置过这个网络
public static WifiConfiguration isExsits(String SSID, Context context) {
WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
List<WifiConfiguration> existingConfigs = wifimanager.getConfiguredNetworks();
for (WifiConfiguration existingConfig : existingConfigs) {
if (existingConfig.SSID.equals("\"" + SSID + "\"")) {
return existingConfig;
}
}
return null;
}
// 打开WIFI
public static void openWifi(Context context) {
WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (!wifimanager.isWifiEnabled()) {
wifimanager.setWifiEnabled(true);
}
}
// 关闭WIFI
public static void closeWifi(Context context) {
WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (wifimanager.isWifiEnabled()) {
wifimanager.setWifiEnabled(false);
}
}
public static boolean isOpenWifi(Context context){
WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
boolean b = wifimanager.isWifiEnabled();
return b;
}
/**
* 将idAddress转化成string类型的Id字符串
*
* @param idString
* @return
*/
public static String getStringId(int idString) {
StringBuffer sb = new StringBuffer();
int b = (idString >> 0) & 0xff;
sb.append(b + ".");
b = (idString >> 8) & 0xff;
sb.append(b + ".");
b = (idString >> 16) & 0xff;
sb.append(b + ".");
b = (idString >> 24) & 0xff;
sb.append(b);
return sb.toString();
}
/**
* 设置安全性
*
* @param capabilities
* @return
*/
public static String getCapabilitiesString(String capabilities) {
if (capabilities.contains("WEP")) {
return "WEP";
} else if (capabilities.contains("WPA") || capabilities.contains("WPA2") || capabilities.contains("WPS")) {
return "WPA/WPA2";
} else {
return "OPEN";
}
}
public static boolean getIsWifiEnabled(Context context) {
WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
return wifimanager.isWifiEnabled();
}
public static void getReplace(Context context, List<WifiBean> list) {
WifiInfo wifi = WifiSupport.getConnectedWifiInfo(context);
List<WifiBean> listCopy = new ArrayList<>();
listCopy.addAll(list);
for (int i = 0; i < list.size(); i++) {
if (("\"" + list.get(i).getWifiName() + "\"").equals(wifi.getSSID())) {
listCopy.add(0, list.get(i));
listCopy.remove(i + 1);
listCopy.get(0).setState("已连接");
}
}
list.clear();
list.addAll(listCopy);
}
/**
* 去除同名WIFI
*
* @param oldSr 需要去除同名的列表
* @return 返回不包含同命的列表
*/
public static List<ScanResult> noSameName(List<ScanResult> oldSr)
{
List<ScanResult> newSr = new ArrayList<ScanResult>();
for (ScanResult result : oldSr)
{
if (!TextUtils.isEmpty(result.SSID) && !containName(newSr, result.SSID))
newSr.add(result);
}
return newSr;
}
/**
* 判断一个扫描结果中,是否包含了某个名称的WIFI
* @param sr 扫描结果
* @param name 要查询的名称
* @return 返回true表示包含了该名称的WIFI,返回false表示不包含
*/
public static boolean containName(List<ScanResult> sr, String name)
{
for (ScanResult result : sr)
{
if (!TextUtils.isEmpty(result.SSID) && result.SSID.equals(name))
return true;
}
return false;
}
/**
* 返回level 等级
*/
public static int getLevel(int level){
if (Math.abs(level) < 50) {
return 1;
} else if (Math.abs(level) < 75) {
return 2;
} else if (Math.abs(level) < 90) {
return 3;
} else {
return 4;
}
}
}
================================================
FILE: app/src/main/java/guo/wifilistconnect/adapter/WifiListAdapter.java
================================================
package guo.wifilistconnect.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
import guo.wifilistconnect.R;
import guo.wifilistconnect.app.AppContants;
import guo.wifilistconnect.bean.WifiBean;
/**
* Created by ${GuoZhaoHui} on 2017/11/7.
* Email:guozhaohui628@gmail.com
*/
public class WifiListAdapter extends RecyclerView.Adapter<WifiListAdapter.MyViewHolder> {
private Context mContext;
private List<WifiBean> resultList;
private onItemClickListener onItemClickListener;
public void setOnItemClickListener(WifiListAdapter.onItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public WifiListAdapter(Context mContext, List<WifiBean> resultList) {
this.mContext = mContext;
this.resultList = resultList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_wifi_list, parent, false);
MyViewHolder vh = new MyViewHolder(view);
return vh;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
final WifiBean bean = resultList.get(position);
holder.tvItemWifiName.setText(bean.getWifiName());
holder.tvItemWifiStatus.setText("("+bean.getState()+")");
//可以传递给adapter的数据都是经过处理的,已连接或者正在连接状态的wifi都是处于集合中的首位,所以可以写出如下判断
if(position == 0 && (AppContants.WIFI_STATE_ON_CONNECTING.equals(bean.getState()) || AppContants.WIFI_STATE_CONNECT.equals(bean.getState()))){
holder.tvItemWifiName.setTextColor(mContext.getResources().getColor(R.color.homecolor1));
holder.tvItemWifiStatus.setTextColor(mContext.getResources().getColor(R.color.homecolor1));
}else{
holder.tvItemWifiName.setTextColor(mContext.getResources().getColor(R.color.gray_home));
holder.tvItemWifiStatus.setTextColor(mContext.getResources().getColor(R.color.gray_home));
}
holder.itemview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClickListener.onItemClick(view,position,bean);
}
});
}
public void replaceAll(List<WifiBean> datas) {
if (resultList.size() > 0) {
resultList.clear();
}
resultList.addAll(datas);
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return resultList.size();
}
static class MyViewHolder extends RecyclerView.ViewHolder{
View itemview;
TextView tvItemWifiName, tvItemWifiStatus;
public MyViewHolder(View itemView) {
super(itemView);
itemview = itemView;
tvItemWifiName = (TextView) itemView.findViewById(R.id.tv_item_wifi_name);
tvItemWifiStatus = (TextView) itemView.findViewById(R.id.tv_item_wifi_status);
}
}
public interface onItemClickListener{
void onItemClick(View view, int postion, Object o);
}
}
================================================
FILE: app/src/main/java/guo/wifilistconnect/app/AppContants.java
================================================
package guo.wifilistconnect.app;
/**
* Created by ${GuoZhaoHui} on 2017/11/27.
* Email:guozhaohui628@gmail.com
*/
public class AppContants {
public static final String WIFI_STATE_CONNECT = "已连接";
public static final String WIFI_STATE_ON_CONNECTING = "正在连接";
public static final String WIFI_STATE_UNCONNECT = "未连接";
}
================================================
FILE: app/src/main/java/guo/wifilistconnect/bean/WifiBean.java
================================================
package guo.wifilistconnect.bean;
/**
* Created by John on 2017/4/7.
*/
public class WifiBean implements Comparable<WifiBean> {
private String wifiName;
private String level;
private String state; //已连接 正在连接 未连接 三种状态
private String capabilities;//加密方式
@Override
public String toString() {
return "WifiBean{" +
"wifiName='" + wifiName + '\'' +
", level='" + level + '\'' +
", state='" + state + '\'' +
", capabilities='" + capabilities + '\'' +
'}';
}
public String getCapabilities() {
return capabilities;
}
public void setCapabilities(String capabilities) {
this.capabilities = capabilities;
}
public String getWifiName() {
return wifiName;
}
public void setWifiName(String wifiName) {
this.wifiName = wifiName;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@Override
public int compareTo(WifiBean o) {
int level1 = Integer.parseInt(this.getLevel());
int level2 = Integer.parseInt(o.getLevel());
return level1 - level2;
}
}
================================================
FILE: app/src/main/java/guo/wifilistconnect/dialog/WifiLinkDialog.java
================================================
package guo.wifilistconnect.dialog;
import android.app.Dialog;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.StyleRes;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import guo.wifilistconnect.MainActivity;
import guo.wifilistconnect.R;
import guo.wifilistconnect.WifiSupport;
/**
* Created by John on 2017/4/7.
*/
public class WifiLinkDialog extends Dialog implements View.OnClickListener{
private TextView text_name;
private EditText password_edit;
private Button cancel_button;
private Button cofirm_button;
private String text_nameString = null;
private String capabilities;
private Context mContext;
public WifiLinkDialog(@NonNull Context context, @StyleRes int themeResId, String text_nameString, String capabilities) {
super(context, themeResId);
this.text_nameString = text_nameString;
this.capabilities = capabilities;
mContext = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View view = LayoutInflater.from(mContext).inflate(R.layout.setting_wifi_link_dialog, null);
setContentView(view);
initView(view);
text_name.setText(text_nameString);
initListener();
}
private void initListener() {
cancel_button.setOnClickListener(this);
cofirm_button.setOnClickListener(this);
password_edit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if((capabilities.contains("WPA") || capabilities.contains("WPA2") || capabilities.contains("WPS"))){
if(password_edit.getText() == null && password_edit.getText().toString().length() < 8){
cofirm_button.setClickable(false);
}else{
cofirm_button.setClickable(true);
}
}else if(capabilities.contains("WEP")){
if(password_edit.getText() == null && password_edit.getText().toString().length() < 8){
cofirm_button.setClickable(false);
}else{
cofirm_button.setClickable(true);
}
}
}
});
}
private void initView(View view) {
text_name = (TextView) view.findViewById(R.id.wifi_title);
password_edit = (EditText) view.findViewById(R.id.password_edit);
cancel_button = (Button) view.findViewById(R.id.cancel_button);
cofirm_button = (Button)view.findViewById(R.id.cofirm_button);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.cofirm_button:{
WifiConfiguration tempConfig = WifiSupport.isExsits(text_nameString,getContext());
if(tempConfig == null){
WifiConfiguration wifiConfiguration = WifiSupport.createWifiConfig(text_nameString,password_edit.getText().toString(),WifiSupport.getWifiCipher(capabilities));
WifiSupport.addNetWork(wifiConfiguration,getContext());
}else{
WifiSupport.addNetWork(tempConfig,getContext());
}
dismiss();
break;
}
case R.id.cancel_button:{
dismiss();
break;
}
}
}
}
================================================
FILE: app/src/main/java/guo/wifilistconnect/utils/CollectionUtils.java
================================================
package guo.wifilistconnect.utils;
import java.util.Collection;
/**
* 集合操作工具类
*/
public class CollectionUtils {
/**
* 判断集合是否为null或者0个元素
*
* @param c
* @return
*/
public static boolean isNullOrEmpty(Collection c) {
if (null == c || c.isEmpty()) {
return true;
}
return false;
}
}
================================================
FILE: app/src/main/res/layout/activity_main.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<RelativeLayout
android:background="@color/gray1"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:textColor="@color/gray_home"
android:layout_marginTop="9dp"
android:layout_marginBottom="9dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:text="WiFi列表"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ProgressBar
android:id="@+id/pb_wifi_loading"
android:layout_marginRight="12dp"
style="@android:style/Widget.ProgressBar.Small"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recy_list_wifi"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</LinearLayout>
================================================
FILE: app/src/main/res/layout/item_wifi_list.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/white"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_centerVertical="true"
android:id="@+id/tv_item_wifi_name"
android:layout_marginLeft="12dp"
android:textSize="14sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv_item_wifi_status"
android:textSize="12sp"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/tv_item_wifi_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:src="@mipmap/icon_wifi_right"
android:layout_marginRight="12dp"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_width="22dp"
android:layout_height="22dp" />
</RelativeLayout>
================================================
FILE: app/src/main/res/layout/setting_wifi_link_dialog.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<LinearLayout
android:layout_gravity="center"
android:background="@color/white"
android:orientation="vertical"
android:layout_width="300dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/wifi_title"
android:layout_marginTop="15dp"
android:layout_marginLeft="15dp"
android:layout_marginBottom="15dp"
android:textColor="@color/homecolor1"
android:textSize="14sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<View
android:background="@color/color_red"
android:layout_width="match_parent"
android:layout_height="3dp" />
<EditText
android:id="@+id/password_edit"
android:textColor="@color/black_home"
android:lines="1"
android:textSize="12sp"
android:hint="请输入WIFI密码"
android:background="@null"
android:layout_width="match_parent"
android:layout_height="36dp" />
<View
android:background="@color/homecolor1"
android:layout_width="match_parent"
android:layout_height="0.2dp" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="36dp">
<Button
android:id="@+id/cancel_button"
android:gravity="center"
android:textSize="14sp"
android:text="取消"
style="?android:attr/borderlessButtonStyle"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<Button
android:id="@+id/cofirm_button"
android:gravity="center"
android:textSize="14sp"
android:text="确定"
style="?android:attr/borderlessButtonStyle"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
================================================
FILE: app/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="gray1">#F8F8F8</color>
<color name="gray_home">#909090</color>
<color name="white">#FFFFFFFF</color>
<color name="homecolor1">#1a5cc0 </color>
<color name="color_red">#FF5722</color>
<color name="black_home">#484848</color>
</resources>
================================================
FILE: app/src/main/res/values/strings.xml
================================================
<resources>
<string name="app_name">WifiListConnect</string>
</resources>
================================================
FILE: app/src/main/res/values/styles.xml
================================================
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="dialog_download" parent="android:Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
</resources>
================================================
FILE: app/src/test/java/guo/wifilistconnect/ExampleUnitTest.java
================================================
package guo.wifilistconnect;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Mon Nov 27 11:24:26 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
================================================
FILE: gradlew
================================================
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: settings.gradle
================================================
include ':app'
gitextract_qc8r63kf/ ├── .gitignore ├── .idea/ │ ├── compiler.xml │ ├── copyright/ │ │ └── profiles_settings.xml │ ├── gradle.xml │ ├── inspectionProfiles/ │ │ ├── Project_Default.xml │ │ └── profiles_settings.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations.xml │ ├── smartfox_info.xml │ └── vcs.xml ├── README.md ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── guo/ │ │ └── wifilistconnect/ │ │ └── ExampleInstrumentedTest.java │ ├── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── guo/ │ │ │ └── wifilistconnect/ │ │ │ ├── MainActivity.java │ │ │ ├── WifiSupport.java │ │ │ ├── adapter/ │ │ │ │ └── WifiListAdapter.java │ │ │ ├── app/ │ │ │ │ └── AppContants.java │ │ │ ├── bean/ │ │ │ │ └── WifiBean.java │ │ │ ├── dialog/ │ │ │ │ └── WifiLinkDialog.java │ │ │ └── utils/ │ │ │ └── CollectionUtils.java │ │ └── res/ │ │ ├── layout/ │ │ │ ├── activity_main.xml │ │ │ ├── item_wifi_list.xml │ │ │ └── setting_wifi_link_dialog.xml │ │ └── values/ │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test/ │ └── java/ │ └── guo/ │ └── wifilistconnect/ │ └── ExampleUnitTest.java ├── build.gradle ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat └── settings.gradle
SYMBOL INDEX (72 symbols across 9 files)
FILE: app/src/androidTest/java/guo/wifilistconnect/ExampleInstrumentedTest.java
class ExampleInstrumentedTest (line 17) | @RunWith(AndroidJUnit4.class)
method useAppContext (line 19) | @Test
FILE: app/src/main/java/guo/wifilistconnect/MainActivity.java
class MainActivity (line 35) | public class MainActivity extends AppCompatActivity {
method onCreate (line 60) | @Override
method initRecycler (line 79) | private void initRecycler() {
method noConfigurationWifi (line 114) | private void noConfigurationWifi(int position) {//之前没配置过该网络, 弹出输入密码界面
method onResume (line 121) | @Override
method onPause (line 133) | @Override
class WifiBroadcastReceiver (line 140) | public class WifiBroadcastReceiver extends BroadcastReceiver {
method onReceive (line 141) | @Override
method wifiListChange (line 213) | public void wifiListChange(){
method wifiListSet (line 226) | public void wifiListSet(String wifiName , int type){
method checkPermission (line 261) | private boolean checkPermission() {
method requestPermission (line 274) | private void requestPermission() {
method sortScaResult (line 282) | public void sortScaResult(){
method onRequestPermissionsResult (line 301) | @Override
method showProgressBar (line 330) | public void showProgressBar() {
method hidingProgressBar (line 334) | public void hidingProgressBar() {
FILE: app/src/main/java/guo/wifilistconnect/WifiSupport.java
class WifiSupport (line 20) | public class WifiSupport {
type WifiCipherType (line 24) | public enum WifiCipherType {
method WifiSupport (line 28) | public WifiSupport() {
method getWifiScanResult (line 31) | public static List<ScanResult> getWifiScanResult(Context context) {
method isWifiEnable (line 36) | public static boolean isWifiEnable(Context context) {
method getConnectedWifiInfo (line 40) | public static WifiInfo getConnectedWifiInfo(Context context) {
method getConfigurations (line 44) | public static List getConfigurations(Context context) {
method createWifiConfig (line 49) | public static WifiConfiguration createWifiConfig(String SSID, String p...
method addNetWork (line 97) | public static boolean addNetWork(WifiConfiguration config, Context con...
method getWifiCipher (line 131) | public static WifiCipherType getWifiCipher(String s) {
method isExsits (line 145) | public static WifiConfiguration isExsits(String SSID, Context context) {
method openWifi (line 157) | public static void openWifi(Context context) {
method closeWifi (line 165) | public static void closeWifi(Context context) {
method isOpenWifi (line 172) | public static boolean isOpenWifi(Context context){
method getStringId (line 184) | public static String getStringId(int idString) {
method getCapabilitiesString (line 203) | public static String getCapabilitiesString(String capabilities) {
method getIsWifiEnabled (line 213) | public static boolean getIsWifiEnabled(Context context) {
method getReplace (line 218) | public static void getReplace(Context context, List<WifiBean> list) {
method noSameName (line 238) | public static List<ScanResult> noSameName(List<ScanResult> oldSr)
method containName (line 254) | public static boolean containName(List<ScanResult> sr, String name)
method getLevel (line 267) | public static int getLevel(int level){
FILE: app/src/main/java/guo/wifilistconnect/adapter/WifiListAdapter.java
class WifiListAdapter (line 22) | public class WifiListAdapter extends RecyclerView.Adapter<WifiListAdapte...
method setOnItemClickListener (line 28) | public void setOnItemClickListener(WifiListAdapter.onItemClickListener...
method WifiListAdapter (line 32) | public WifiListAdapter(Context mContext, List<WifiBean> resultList) {
method onCreateViewHolder (line 38) | @Override
method onBindViewHolder (line 45) | @Override
method replaceAll (line 68) | public void replaceAll(List<WifiBean> datas) {
method getItemCount (line 76) | @Override
class MyViewHolder (line 82) | static class MyViewHolder extends RecyclerView.ViewHolder{
method MyViewHolder (line 87) | public MyViewHolder(View itemView) {
type onItemClickListener (line 96) | public interface onItemClickListener{
method onItemClick (line 97) | void onItemClick(View view, int postion, Object o);
FILE: app/src/main/java/guo/wifilistconnect/app/AppContants.java
class AppContants (line 8) | public class AppContants {
FILE: app/src/main/java/guo/wifilistconnect/bean/WifiBean.java
class WifiBean (line 7) | public class WifiBean implements Comparable<WifiBean> {
method toString (line 13) | @Override
method getCapabilities (line 23) | public String getCapabilities() {
method setCapabilities (line 27) | public void setCapabilities(String capabilities) {
method getWifiName (line 31) | public String getWifiName() {
method setWifiName (line 35) | public void setWifiName(String wifiName) {
method getLevel (line 39) | public String getLevel() {
method setLevel (line 43) | public void setLevel(String level) {
method getState (line 47) | public String getState() {
method setState (line 51) | public void setState(String state) {
method compareTo (line 55) | @Override
FILE: app/src/main/java/guo/wifilistconnect/dialog/WifiLinkDialog.java
class WifiLinkDialog (line 26) | public class WifiLinkDialog extends Dialog implements View.OnClickListener{
method WifiLinkDialog (line 44) | public WifiLinkDialog(@NonNull Context context, @StyleRes int themeRes...
method onCreate (line 53) | @Override
method initListener (line 65) | private void initListener() {
method initView (line 98) | private void initView(View view) {
method onClick (line 105) | @Override
FILE: app/src/main/java/guo/wifilistconnect/utils/CollectionUtils.java
class CollectionUtils (line 8) | public class CollectionUtils {
method isNullOrEmpty (line 16) | public static boolean isNullOrEmpty(Collection c) {
FILE: app/src/test/java/guo/wifilistconnect/ExampleUnitTest.java
class ExampleUnitTest (line 12) | public class ExampleUnitTest {
method addition_isCorrect (line 13) | @Test
Condensed preview — 38 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (72K chars).
[
{
"path": ".gitignore",
"chars": 118,
"preview": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n"
},
{
"path": ".idea/compiler.xml",
"chars": 686,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"CompilerConfiguration\">\n <resourceExt"
},
{
"path": ".idea/copyright/profiles_settings.xml",
"chars": 74,
"preview": "<component name=\"CopyrightManager\">\n <settings default=\"\" />\n</component>"
},
{
"path": ".idea/gradle.xml",
"chars": 626,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"GradleSettings\">\n <option name=\"linke"
},
{
"path": ".idea/inspectionProfiles/Project_Default.xml",
"chars": 7451,
"preview": "<component name=\"InspectionProjectProfileManager\">\n <profile version=\"1.0\">\n <option name=\"myName\" value=\"Project De"
},
{
"path": ".idea/inspectionProfiles/profiles_settings.xml",
"chars": 235,
"preview": "<component name=\"InspectionProjectProfileManager\">\n <settings>\n <option name=\"PROJECT_PROFILE\" value=\"Project Defaul"
},
{
"path": ".idea/misc.xml",
"chars": 2664,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"EntryPointsManager\">\n <entry_points v"
},
{
"path": ".idea/modules.xml",
"chars": 367,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"ProjectModuleManager\">\n <modules>\n "
},
{
"path": ".idea/runConfigurations.xml",
"chars": 564,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"RunConfigurationProducerService\">\n <o"
},
{
"path": ".idea/smartfox_info.xml",
"chars": 188,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"SmartFoxProjectConfig\">\n <option name"
},
{
"path": ".idea/vcs.xml",
"chars": 180,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"VcsDirectoryMappings\">\n <mapping dire"
},
{
"path": "README.md",
"chars": 962,
"preview": "# WifiListConnect\n\n<b>定期分享国内外别人家技术赚钱的案例,希望能给你启发。可以关注一波 保证不坑,坑了取消就是啦 :) </b>\n\n### 最新分享\n【案例】这些日赚上万美金Youtube油管从业者 技术人的福音 ht"
},
{
"path": "app/.gitignore",
"chars": 7,
"preview": "/build\n"
},
{
"path": "app/build.gradle",
"chars": 640,
"preview": "apply plugin: 'com.android.application'\n\nandroid {\n compileSdkVersion 26\n buildToolsVersion \"26.0.2\"\n defaultCo"
},
{
"path": "app/proguard-rules.pro",
"chars": 930,
"preview": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in D:"
},
{
"path": "app/src/androidTest/java/guo/wifilistconnect/ExampleInstrumentedTest.java",
"chars": 742,
"preview": "package guo.wifilistconnect;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\nimpor"
},
{
"path": "app/src/main/AndroidManifest.xml",
"chars": 1105,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package="
},
{
"path": "app/src/main/java/guo/wifilistconnect/MainActivity.java",
"chars": 13033,
"preview": "package guo.wifilistconnect;\n\nimport android.Manifest;\nimport android.content.BroadcastReceiver;\nimport android.content."
},
{
"path": "app/src/main/java/guo/wifilistconnect/WifiSupport.java",
"chars": 8962,
"preview": "package guo.wifilistconnect;\n\nimport android.content.Context;\nimport android.net.wifi.ScanResult;\nimport android.net.wif"
},
{
"path": "app/src/main/java/guo/wifilistconnect/adapter/WifiListAdapter.java",
"chars": 3280,
"preview": "package guo.wifilistconnect.adapter;\n\nimport android.content.Context;\nimport android.support.v7.widget.RecyclerView;\nimp"
},
{
"path": "app/src/main/java/guo/wifilistconnect/app/AppContants.java",
"chars": 337,
"preview": "package guo.wifilistconnect.app;\n\n/**\n * Created by ${GuoZhaoHui} on 2017/11/27.\n * Email:guozhaohui628@gmail.com\n */\n\np"
},
{
"path": "app/src/main/java/guo/wifilistconnect/bean/WifiBean.java",
"chars": 1382,
"preview": "package guo.wifilistconnect.bean;\n\n/**\n * Created by John on 2017/4/7.\n */\n\npublic class WifiBean implements Comparable<"
},
{
"path": "app/src/main/java/guo/wifilistconnect/dialog/WifiLinkDialog.java",
"chars": 4026,
"preview": "package guo.wifilistconnect.dialog;\n\nimport android.app.Dialog;\nimport android.content.Context;\nimport android.net.wifi."
},
{
"path": "app/src/main/java/guo/wifilistconnect/utils/CollectionUtils.java",
"chars": 357,
"preview": "package guo.wifilistconnect.utils;\n\nimport java.util.Collection;\n\n/**\n * 集合操作工具类\n */\npublic class CollectionUtils {\n\n "
},
{
"path": "app/src/main/res/layout/activity_main.xml",
"chars": 1460,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andr"
},
{
"path": "app/src/main/res/layout/item_wifi_list.xml",
"chars": 1183,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RelativeLayout\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n "
},
{
"path": "app/src/main/res/layout/setting_wifi_link_dialog.xml",
"chars": 2285,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n andr"
},
{
"path": "app/src/main/res/values/colors.xml",
"chars": 469,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"colorPrimary\">#3F51B5</color>\n <color name=\"color"
},
{
"path": "app/src/main/res/values/strings.xml",
"chars": 78,
"preview": "<resources>\n <string name=\"app_name\">WifiListConnect</string>\n</resources>\n"
},
{
"path": "app/src/main/res/values/styles.xml",
"chars": 1068,
"preview": "<resources>\n\n <!-- Base application theme. -->\n <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar"
},
{
"path": "app/src/test/java/guo/wifilistconnect/ExampleUnitTest.java",
"chars": 397,
"preview": "package guo.wifilistconnect;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test,"
},
{
"path": "build.gradle",
"chars": 498,
"preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n r"
},
{
"path": "gradle/wrapper/gradle-wrapper.properties",
"chars": 230,
"preview": "#Mon Nov 27 11:24:26 CST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
},
{
"path": "gradle.properties",
"chars": 730,
"preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
},
{
"path": "gradlew",
"chars": 4971,
"preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n## Gradle start "
},
{
"path": "gradlew.bat",
"chars": 2314,
"preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
},
{
"path": "settings.gradle",
"chars": 15,
"preview": "include ':app'\n"
}
]
// ... and 1 more files (download for full content)
About this extraction
This page contains the full source code of the GuoZhaoHui628/WifiListConnect GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 38 files (63.1 KB), approximately 16.8k tokens, and a symbol index with 72 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.