Android WIFI 开发

Android/安卓开发之WIFI的基本应用 本文没有涉及到连接WIFI之后进行通讯,若有这方面的想法(例如两个客户端连接至同一WIFI后进行通讯),请关注后续文章一起讨论。 其实关于WIFI的开发的文章也非常的多,但是大部分只是简单的例子,不够全面,我这里是想写一个比较完整的WIFI应用,主要功能: 1.能够打开/关闭WIFI 2.能够扫面wifi并获取扫描结果 3.能够连接wifi,无论是什么加密方式 4.能够监听连接状态,如正... 阅读详情

公司之前业务需要,APP内需要实现搜索wifi,连接wifi等操作。在网上找了很多资料,终于做了出来,现在提取出来部分功能写成demo,和大家分享。先看图:
这里写图片描述

下面来看看主要wifi操作代码WifiAdmin.java:
PS:这个名字我看网络上都用,我也用了。使用的WifiManager类,其中的创建热点部分被隐藏了,可以用反射实现热点功能。配置WifiConfiguration进行连接时,无密码wifi和加密的处理是有些不一样的,网上千篇一律的全是一样的,然后我就被坑了,无密码的一直不能有,还好google到了原因。

连接步骤:搜索—-判断指定wifi是否有配置好的WifiConfiguration—-有进行连接;没有手动配置进行连接。
如下图:这里写图片描述

WifiAdmin.java:

package com.example.wificonnect;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.net.ConnectivityManager;
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.net.wifi.WifiManager.WifiLock;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

/**
 * WIFI管理
 * 
 * @author xugang
 * 
 */
public class WifiAdmin {
    // WifiManager对象
    private WifiManager mManager;
    // WifiInfo对象
    private WifiInfo mWifiInfo;
    // 网络设置列表
    private List<WifiConfiguration> mConfigurations;
    // Wifi锁
    private WifiLock mWifiLock;
    private ConnectivityManager connManager;

    /** 开始搜索 */
    public static final int scan = 0;
    /** 开始得到结果 */
    public static final int restult = 1;
    /** 暂停 */
    public static final int onStop = 2;
    /** 销毁 */
    public static final int onDestroy = 3;
    /** 打开wifi */
    public static final int open = 4;
    /** 找到 需要的WIFI */
    public static final int connect = 5;
    /** 正在连接 */
    public static final int connecting = 6;
    /** 已连接 */
    public static final int connected = 7;
    /** 搜索超时 */
    public static final int OutOfTime = 8;

    private static WifiAdmin admin;
    public static final int WPA_PSK = 3;
    public static final int WEP = 2;
    public static final int NO_PWD = 1;

    private OnWifiConnectListener onWifiConnectListener;

    private Context mContext;

    public void setOnWifiConnectListener(OnWifiConnectListener onWifiConnectListener) {
        this.onWifiConnectListener = onWifiConnectListener;
    }

    private WifiAdmin(Context context) {
        this.mContext = context;
        this.mManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        mWifiInfo = mManager.getConnectionInfo();
        mConfigurations = new ArrayList<WifiConfiguration>();
        connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    }

    public static WifiAdmin getInstance(Context context) {
        if (admin == null) {
            admin = new WifiAdmin(context);
        }
        return admin;
    }

    /** 获取当前连接信息 */
    public WifiInfo getConnectionInfo() {
        if (!isConnectWifi())
            return null;
        mWifiInfo = mManager.getConnectionInfo();
        return mWifiInfo;
    }

    /** 判断当前WIFI是否连接 */
    public boolean isConnectWifi() {
        NetworkInfo mInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        return mInfo.isConnected();
    }

    /** 获取MAC */
    public String getMac() {
        mWifiInfo = mManager.getConnectionInfo();
        return mWifiInfo.getMacAddress();
    }

    /**
     * 更具指定名称筛选WIFI列表
     * 
     * @param cs
     * @return
     */
    public List<ScanResult> getScanResult() {
        return mManager.getScanResults();
    }

    /**
     * 获得WifiConfiguration列表
     * 
     * @param cs
     * @return
     */
    public List<WifiConfiguration> getConfigurations() {
        mConfigurations = mManager.getConfiguredNetworks();
        return mConfigurations;
    }

    public boolean isWifiEnabled() {
        return mManager.isWifiEnabled();
    }

    // 判定指定WIFI是否已经配置好,依据WIFI的地址SSID,返回NetId
    public int IsConfiguration(String SSID) {
        for (int i = 0; i < mConfigurations.size(); i++) {
            if (mConfigurations.get(i).SSID.equals("\"" + SSID + "\"")) {// 地址相同
                return mConfigurations.get(i).networkId;
            }
        }
        return -1;
    }

    /**
     * 打开WIFI
     */
    public void openWifi() {
        if (!mManager.isWifiEnabled()) {
            mManager.setWifiEnabled(true);
        }
    }

    /**
     * 搜索Wifi
     */
    public boolean startScan() {
        openWifi();
        return mManager.startScan();
    }

    /**
     * 关闭WIfi
     */
    public void closeWifi() {
        if (!mManager.isWifiEnabled()) {
            mManager.setWifiEnabled(false);
        }
    }

    /**
     * 锁定WifiLock
     */
    public void AcquireWifiLock() {
        mWifiLock.acquire();
    }

    /**
     * 释放锁
     */
    public void releaseWifiLock() {
        if (mWifiLock.isHeld()) {
            mWifiLock.release();
        }
    }

    /**
     * 创建一个WifiLock
     */
    public void createWifiLock() {
        mWifiLock = mManager.createWifiLock("wifiAdmin");
    }

    // 连接配置好的网络
    public void connectConfiguration(WifiConfiguration config) {
        int netid = mManager.addNetwork(config);
        boolean res = connectNetId(netid);
        if (onWifiConnectListener != null) {
            onWifiConnectListener.onWifiConnect(res);
        }
    }

    // 连接指定netId的WIFI
    public boolean connectNetId(int netId) {
        boolean res = mManager.enableNetwork(netId, true);
        return res;
    }

    public interface OnWifiConnectListener {
        public void onWifiConnect(boolean res);
    }

    /**
     * 指定配置好的网络连接
     * 
     * @param index
     */
    public void connectConfiguration(int index) {
        if (index > mConfigurations.size()) {
            return;
        }
        mManager.enableNetwork(mConfigurations.get(index).networkId, true);
    }

    // 连接
    public void connect(final ScanResult result) {
        getConfigurations();
        int netId = IsConfiguration(result.SSID);
        if (netId != -1) {
            showConnectWiFiWithoutPwd(result.SSID, netId);
            return;
        }
        if (result.capabilities.contains("WPA")) {
            // wpa-psk加密
            showConnectWiFiWithPwd(result.SSID, WPA_PSK);
        } else if (result.capabilities.contains("WEP")) {
            // wep加密
            showConnectWiFiWithPwd(result.SSID, WEP);
        } else {
            // 未加密
            showConnectWiFiWithoutPwd(result.SSID, -1);
        }
    }

    // 生成WifiConfiguration
    public WifiConfiguration createWifiInfo(String SSID, String Password, int Type) {
        WifiConfiguration localWifiConfiguration1 = new WifiConfiguration();
        localWifiConfiguration1.allowedAuthAlgorithms.clear();
        localWifiConfiguration1.allowedGroupCiphers.clear();
        localWifiConfiguration1.allowedKeyManagement.clear();
        localWifiConfiguration1.allowedPairwiseCiphers.clear();
        localWifiConfiguration1.allowedProtocols.clear();
        localWifiConfiguration1.SSID = ("\"" + SSID + "\"");
        WifiConfiguration localWifiConfiguration2 = isExsits(SSID);
        if (localWifiConfiguration2 != null)
            mManager.removeNetwork(localWifiConfiguration2.networkId);
        //下面几个是开放wifi和非开放wifi的配置方式,经测试不管是开放的和不开放的都能链接
        if (Type == NO_PWD) {
            localWifiConfiguration1.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        } else if (Type == WEP) {
            localWifiConfiguration1.hiddenSSID = true;
            localWifiConfiguration1.wepKeys[0] = ("\"" + Password + "\"");
        } else {
            localWifiConfiguration1.preSharedKey = ("\"" + Password + "\"");
            localWifiConfiguration1.hiddenSSID = true;
            localWifiConfiguration1.allowedAuthAlgorithms.set(0);
            localWifiConfiguration1.allowedGroupCiphers.set(2);
            localWifiConfiguration1.allowedKeyManagement.set(1);
            localWifiConfiguration1.allowedPairwiseCiphers.set(1);
            localWifiConfiguration1.allowedGroupCiphers.set(3);
            localWifiConfiguration1.allowedPairwiseCiphers.set(2);
        }
        return localWifiConfiguration1;
    }

    // 返回指定SSID的WifiConfiguration
    private WifiConfiguration isExsits(String SSID) {
        Iterator<WifiConfiguration> localIterator = this.mManager.getConfiguredNetworks().iterator();
        WifiConfiguration localWifiConfiguration;
        do {
            if (!localIterator.hasNext())
                return null;
            localWifiConfiguration = (WifiConfiguration) localIterator.next();
        } while (!localWifiConfiguration.SSID.equals("\"" + SSID + "\""));
        return localWifiConfiguration;
    }

    // 显示连接Wifi弹框,需要输入密码
    private void showConnectWiFiWithPwd(final String ssid, final int type) {
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.dialog_sgin, null);
        final TextView name = (TextView) view.findViewById(R.id.name);
        final EditText password = (EditText) view.findViewById(R.id.password);
        name.setText(ssid);
        builder.setView(view).setPositiveButton(R.string.connect, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                String pwd = password.getText().toString().trim();
                if (!TextUtils.isEmpty(pwd))
                    connectConfiguration(createWifiInfo(ssid, pwd, type));
            }
        }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });
        builder.create().show();
    }

    // 显示连接Wifi弹框,不需要输入密码
    private void showConnectWiFiWithoutPwd(final String ssid, final int type) {
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.dialog_sgin_open, null);
        final TextView name = (TextView) view.findViewById(R.id.name);
        name.setText(ssid);
        builder.setView(view).setPositiveButton(R.string.connect, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int id) {
                switch (type) {
                case -1:
                    connectConfiguration(createWifiInfo(ssid, "", type));
                    break;
                default:
                    connectNetId(type);
                    break;
                }
            }
        }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });
        builder.create().show();
    }

}

适配器基类:

package com.example.wificonnect.adapter;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import com.lidroid.xutils.ViewUtils;

/**
 * @ClassName CommonAdapter.java
 * @Description 公用Adapter , 能满足基本需求,使用时直接集成此类和BaseViewHolder</br>已经重用item的View
 * @author xugang
 * @date 2015-8-14 下午12:25:27
 */
public abstract class CommonAdapter<T> extends BaseAdapter {

    public List<T> mList;
    private LayoutInflater mInflater;

    public CommonAdapter(Context context) {
        this(context, null);
    }

    public CommonAdapter(Context context, List<T> mList) {
        if (mList != null)
            this.mList = mList;
        else {
            this.mList = new ArrayList<T>();
        }
        mInflater = LayoutInflater.from(context);
    }

    public void addObjToList(T t) {
        if (t != null) {
            mList.add(t);
        }
    }

    public void addObjToList(int position, T t) {
        if (t != null) {
            mList.add(position, t);
        }
    }

    public void addArraysToList(List<T> list) {
        if (list != null) {
            mList.addAll(list);
        }
    }

    public void setArrayToList(List<T> list) {
        if (list != null) {
            mList = list;
        }
    }

    @Override
    public int getCount() {
        return mList == null ? 0 : mList.size();
    }

    @Override
    public Object getItem(int position) {
        return mList == null ? null : mList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @SuppressWarnings("unchecked")
    @Override
    public View getView(int position, View view, ViewGroup parent) {
        BaseViewHolder holder;
        if (view == null) {
            view = mInflater.inflate(setItemLayoutId(), parent, false);
            holder = setViewHolder();
            ViewUtils.inject(holder, view);
            view.setTag(holder);
        } else {
            holder = (BaseViewHolder) view.getTag();
        }
        holder.inflaterContent(position);

        return view;
    }

    /**
     * 添加item布局
     */
    public abstract int setItemLayoutId();

    /**
     * 设置ViewHolder
     */
    public abstract BaseViewHolder setViewHolder();

    public abstract class BaseViewHolder {
        /**
         * 在此方法里填充内容
         */
        public abstract void inflaterContent(int position);

    }

}

以下WifiAdapter:
需要注意的是注意判断是否为加密WIfi

package com.example.wificonnect.adapter;

import com.example.wificonnect.R;
import com.example.wificonnect.WifiAdmin;
import com.lidroid.xutils.view.annotation.ViewInject;

import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * @project WiFiConnect
 * @ClassName WifiAdapter.java
 * @Description  Wifi适配器
 * @author xugang
 * @date 2015-8-18 下午5:11:10
 */
public class WifiAdapter<T> extends CommonAdapter<T> {
    private WifiAdmin wifiAdmin;

    public WifiAdapter(Context context) {
        super(context);
        wifiAdmin = WifiAdmin.getInstance(context);
    }

    @Override
    public int setItemLayoutId() {
        return R.layout.item;
    }

    @Override
    public BaseViewHolder setViewHolder(int position) {
        return new ViewHolder();
    }

    class ViewHolder extends BaseViewHolder {
        @ViewInject(R.id.wifi_name)
        private TextView wifi_name;
        @ViewInject(R.id.wifi_state)
        private TextView wifi_state;
        @ViewInject(R.id.wifi_indicate)
        private ImageView wifi_indicate;


        @Override
        public void inflaterContent(int position) {
            ScanResult scanResult = (ScanResult) mList.get(position);
            wifi_name.setText(scanResult.SSID);
            WifiInfo wifiInfo = wifiAdmin.getConnectionInfo();
            setLevel(scanResult);
            if (wifiInfo == null) {
                wifi_state.setText("未连接");
            } else {
                if (wifiInfo.getSSID().equals("\"" + scanResult.SSID + "\"")) {
                    wifi_state.setText("已连接");
                } else {
                    wifi_state.setText("未连接");
                }
            }
        }

        public void setLevel(ScanResult scanResult) {
            int level = WifiManager.calculateSignalLevel(scanResult.level, 4);
            int imgId = R.drawable.ic_wifi_signal_lock_1;
            if (scanResult.capabilities.contains("WEP") || scanResult.capabilities.contains("WPA")) {
                switch (level) {
                case 0:
                    imgId = R.drawable.ic_wifi_signal_lock_1;
                    break;
                case 1:
                    imgId = R.drawable.ic_wifi_signal_lock_2;
                    break;
                case 2:
                    imgId = R.drawable.ic_wifi_signal_lock_3;
                    break;
                case 3:
                    imgId = R.drawable.ic_wifi_signal_lock_4;
                    break;
                }
            } else {
                switch (level) {
                case 0:
                    imgId = R.drawable.ic_wifi_signal_open_1;
                    break;
                case 1:
                    imgId = R.drawable.ic_wifi_signal_open_2;
                    break;
                case 2:
                    imgId = R.drawable.ic_wifi_signal_open_3;
                    break;
                case 3:
                    imgId = R.drawable.ic_wifi_signal_open_4;
                    break;
                }
            }
            wifi_indicate.setImageResource(imgId);
        }

    }

}

在Activity中使用,需要注册广播来获取wifi变化消息,如下:

package com.example.wificonnect;

import com.example.wificonnect.adapter.WifiAdapter;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;

import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

public class MainActivity extends Activity implements OnClickListener, OnItemClickListener {
    private WifiAdmin wifiAdmin;
    private WifiBroadcastReceiver broadcastReceiver;
    private WifiAdapter<ScanResult> mAdapter;
    @ViewInject(R.id.lv)
    private ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewUtils.inject(this);
        findViewById(R.id.refresh).setOnClickListener(this);
        wifiAdmin = WifiAdmin.getInstance(this);
        mAdapter = new WifiAdapter<ScanResult>(this);
        lv.setAdapter(mAdapter);
        lv.setOnItemClickListener(this);
        registerWifiReceiver();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(broadcastReceiver);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.refresh:
            wifiAdmin.startScan();
            break;

        default:
            break;
        }
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        ScanResult scanResult = (ScanResult) parent.getItemAtPosition(position);
        wifiAdmin.connect(scanResult);
    };

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case WifiAdmin.restult:
                mAdapter.setArrayToList(wifiAdmin.getScanResult());
                mAdapter.notifyDataSetChanged();
                break;
            case WifiAdmin.OutOfTime:

                break;
            default:
                break;
            }
        }
    };

    /**
     * 注册广播Wifi变化
     */
    private void registerWifiReceiver() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        broadcastReceiver = new WifiBroadcastReceiver();
        this.registerReceiver(broadcastReceiver, intentFilter);
    }
    //广播接收wifi变化
    public class WifiBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            // ScanResult
            if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {
                handler.sendEmptyMessage(WifiAdmin.restult);
            } else if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {
                // // 网络连接变化
                System.out.println("-----------已切换");
                mAdapter.notifyDataSetChanged();
            } else if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
                System.out.println("-----------WiFi状态变化");
            }
        }
    }
}

项目demo:http://download.youkuaiyun.com/detail/hello_12413/9021927

Android WIFI开发:获取wifi列表,连接指定wifi,获取wifi加密方式,监听wifi网络变化等 下面是 Android 开发中 WiFi 的常用配置,如:获取当前 WiFi ,扫描 WiFi 获取列表,连接指定 WiFi ,监听网络变化等等。 下面是效果图: GitHub 下载地址:https://github.com/wuqingsen/WifiDemoWu csdn 下载地址 :https://download.youkuaiyun.com/download/wuqingsen1/1... 阅读详情

相关推荐

Android WiFi开发 (一)扫描、连接、信息

在平常开发中经常会涉及到wifi相关的内容,在此将之前所用到的整理一下,以免忘记。 操作wifi的相关类,主要放在android.net.wifi包下面。使用wifi相关方法需要申请一些权限:   ACCESS_WIFI_STATE  获取WiFi状态。 CHANGE_WIFI_STATE     改变WiFi状态。 CHANGE_WIFI_MULTICAST_STATE 改变Wi

奋斗的菜鸟ing 7万+

Android11 wifi密码类型判断和总结

(1) 各自特点和联系ScanResult ,扫描到的wifi列表的单个 wifi 信息对象,普通应用中使用WifiConfiguration , 已保存的单个 wifi 数据对象,提取了ScanResult 对象部分信息, 普通应用中使用AccessionPoint ,提取了ScanResult 对象部分信息,比 WifiConfiguration 做了更多的封装(加了加密类型字符串和int值,wifi信号的获取等),一般是系统应用使用,比如原生Settings。

chuyouyinghe的专栏 1827

Android WiFi开发

介绍Android WiFi的扫描、连接、信息、以及WiFi热点等等的实现,并用代码实现。

findhappy117的博客 775

如何快速简单的获取WIFI的加密方式

场景:有的设备连接热点或者网络设备需要知道其加密方式,才能实现网络连接,或者实行解密破解等。 WIFi加密的方式日益更新,那么如何简单快速查看需要WIFI的加密方式? 下面我来介绍一种非常实用且简单的查看方式,仅需要一台手机设备,以苹果手机为例(安卓手机同理),下面是具体实现步骤: 1、首先打开手机设置中的WiFi连接模块: 点击后进入如图所示的界面,以图中的TP-LINK_82EB2C为例,实现获取该WIFI热点的加密方式: 输入我们要获取的WIFI名称后,先选择图中默认的安全性协议(也就是加

qq_45967311的博客 1万+

Android WIFI开发

Android WIFI开发

码点 698

安卓APP开发:WiFi彩灯控制系统的毕业设计

安卓(Android)是当今最流行的移动操作系统之一,广泛应用于手机、平板电脑等各种智能设备。安卓应用开发涉及到对安卓SDK(软件开发包)的使用,以及对Java或Kotlin等编程语言的熟悉。开发者需要掌握安卓的基础架构,包括操作系统、中间件以及核心应用程序。安卓应用开发流程包括需求分析、设计、编码、测试和部署。在编码阶段,开发者将通过编写Java或Kotlin代码、使用XML布局文件来构建应用的界面和逻辑。

weixin_34779181的博客 1069

Android 如何判断wifi热点是否需要密码

一、最近开发wifi热点扫描功能,要判断当前连接的wifi热点是否需要密码。在网上搜索之后,发现有如下方法: private static final int WIFI_NEED_PASSWORD = 0; private static final int WIFI_NO_PASSWORD = 1; private static final int WIFI_NOT

我的专栏 1万+

wifi热点扫描,判断信号强度,是否加密

wifi热点扫描,判断信号强度,断开wifi,连接指定点的wifi点,是否加密,

android 获取wifi的加密类型,wifi加密类型

最近开发wifi方面的功能,需要根据wifi加密类型来展现UI。遇到了一个比较蛋疼的问题:如何判断wifi加密类型wifi的管理需要通过WifiManager来操作WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);开启和关闭wifimWifiManager.setWifiE...

weixin_39638048的博客 1769

Android开发wifi加密连接

本文是【Android开发】wifi开关与wifi连接(密码连接)【地址:http://blog.youkuaiyun.com/jingleye/article/details/50416890】博文的demo,这个demo包含了wifi的开关,wifi信息的获取,wifi扫描,wifi有无密码的连接

Unity 常见问题 之 打包编译的报错 Unable to sign the application; please provide passwords!

Unity 常见问题 之 打包编译的报错 Unable to sign the application; please provide passwords! 目录 Unity 常见问题 之 打包编译的报错 Unable to sign the application; please provide passwords! 一、简单介绍 二、问题描述 三、原因分析 四、可能的解决方法 方法一:取消 Keystore 设置即可 方法二:重新添加 Keystore 相关设置 一...

仙魁XAN 1万+

android获取wifi加密类型,android 获取当前隐藏和未隐藏wifi的加密方式(安全性)...

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);WifiManager mWifiMana...

weixin_42303285的博客 1074

多模态融合相关概念

多模态图像融合

weixin_43921949的博客 7357

python 开发安卓 获取wifi_Android WiFi开发(WiFi编程)实例演示

Android SDK 提供了 WIFI 开发的相关 API,被保存在 android.net.wifi 和 android.net.wifi.p2p 包下。借助于 Android SDK 提供的相关开发类,可以方便地在 Android 系统的手机上开发基于 WIFI 的应用程序。实例 WIFIDemo 演示了使用 WIFI 进行连接设备搜索并获取相应信息的过程,运行效果如图 1 所示。图 1...

weixin_32806343的博客 909

Win10下YOLOv8环境搭建避坑指南:从CUDA 11.6到cuDNN配置全流程

本文详细介绍了在Windows 10系统下搭建YOLOv8环境的完整流程,包括CUDA 11.6和cuDNN的配置步骤,以及常见问题的解决方案。通过硬件准备、软件安装、环境验证和性能优化等环节,帮助开发者高效完成YOLOv8环境配置,提升目标检测项目的开发效率。

defi6farmer的博客 225

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

python 开发安卓 获取wifi_qt android 开发之wifi开发篇

小编简单介绍如何通过调用android API来获取wifi服务(非常感谢作者安晓辉发布了qt android 核心编程这本书,让我两天搞懂了很多在qt中开发安卓的要领,现在跟大家分享下!至于还没知道怎么配置qt android换将的开发者,极力推荐先去看看qt android 核心编程这本书(哈哈,一知道要出这本书, 还没出版的时候我天天看着京东有货了没!)上代码!工程源码(这些都是大二大三时候...

weixin_39636608的博客 638

【智能流体力学】使用ANSYS Fluent + SpaceClaim + SCDM制作流体力学前处理的几何模型

生成来源.scdoc文件来自前处理工具生成的模型数据,或在 FLUENT 中创建和保存的模型。生成方式: 通过前处理工具导出网格数据,或在 FLUENT 中设置并保存模型。作用: 用于储存模型的结构信息和设置,确保在 FLUENT 中的正确导入和使用。.x_t文件是 Parasolid 文件格式的扩展名,用于存储三维模型数据。在 ANSYS Fluent 中,这种格式通常用于在前处理工具之间交换几何数据。要创建.x_t。

源代码杀手的博客 3265

android开发:安卓13Wifi和热点查看与设置功能

android开发:安卓13Wifi和热点查看与设置功能

编程之道在明明德在亲民在止于至善 4533

Coverity本地增量C/C++代码检查(Linux)操作简介

Coverity 是一款精确的综合静态分析与应用安全测试 (SAST) 平台,它可以在编写代码时发现关键的缺陷和安全缺陷,防止它们变成安全漏洞、故障或维护缺陷。

1484

第一百三十九回 介绍三个BLE包

本章回中主要介绍了Flutter中BLE的概念和操作方法,主要介绍了三个BLE包的功能和差异,以方便大家在BLE操作中选择不同的包。

talk_8的专栏 574

Android WiFi 开发全解析:从基础操作到 WiFi 6 优化实战

本文系统介绍了Android WiFi开发的全套技术方案,从基础框架到高级应用。文章首先剖析了Android WiFi框架的核心组件和权限体系演变,详细讲解了WiFi状态监控、网络扫描与连接等基础操作。随后深入探讨了WiFi P2P、WiFi Aware等高级功能实现,以及WiFi 6特性适配和性能优化策略。文中提供了大量实用代码示例,包括WiFi分析工具的实现,并展望了6GHz频段支持、多链路聚合等未来技术趋势。全文覆盖了从Android 10到14的关键API变化,为开发者提供了从基础到进阶的完整WiF

weixin_37794278的博客 2101

服务器取证——服务器基础知识

服务器基础知识

记录并分享学习安全的知识点.. 2482

android wifi开发

【移动开发】Android中WIFI开发总结(一) 2013-12-02 16:08:28 标签:Android wifi开发总结 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://smallwoniu.blog.51cto.com/3911954/1334951        WIFI就是一种

xiag160的专栏 582

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android wifi开发调试总结

如果开发wifi相关功能,必须先掌握基本api知识和相关广播的监听;wifi调用的功能基本都是系统签名权限的系统应用,比如Settings;本简单介绍wifi开发基本知识,有兴趣的可以看看。adbshell 的 ifconfig可以获取当前设备网络节点信息;这些信息使用Android代码也是可以获取的;Android 获取网络ip有多种方式,有时候某种方式获取失败的情况下;

wenzhi的博客 2151

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: AppStoreDemo
下一篇: Android Studio 笔记之签名设置
hello_12413
博客等级 码龄14年 8粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值