`

调用API设置安卓手机的Access Point

阅读更多
原帖地址:http://www.cnblogs.com/huang0925/archive/2013/06/05/3118693.html
<article class="hentry" role="article"><div class="entry-content"> <br><br><p>最近在做一个小的应用,需要通过程序设置安卓手机的AP(Access point, 即将手机变为一个移动热点,其他机器能够通过wifi连接到此手机)。原以为很简单的一个东西,还是花费了一番周折,最终还是搞定了。</p> <br><br><!-- more --><br><br><br><p>配置AP的选项是属于配置wifi的一部分,所以他们都在WifiManager这个类中。<br>获取当前系统的WifiManager实例的方法是:</p> <br><br><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr> <br><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span><br></pre></td> <br><td class="code"><pre><code class="java"><span class="line"><span class="n">WifiManager</span> <span class="n">wifi</span> <span class="o">=</span> <span class="o">(</span><span class="n">WifiManager</span><span class="o">)</span> <span class="n">getSystemService</span><span class="o">(</span><span class="n">Context</span><span class="o">.</span><span class="na">WIFI_SERVICE</span><span class="o">);</span><br></span></code></pre></td> <br> </tr></table></div></figure><p>此类中有几个关键方法用来设置AP,但是它们都是被隐藏的,我们无法直接调用,所以只有通过反射的方式来调用。</p> <br><br><p>获取AP当前状态的方法是:</p> <br><br><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr> <br><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></pre></td> <br><td class="code"><pre><code class="java"><span class="line"><span class="kd">private</span> <span class="n">Boolean</span> <span class="nf">getApState</span><span class="o">(</span><span class="n">WifiManager</span> <span class="n">wifi</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">NoSuchMethodException</span><span class="o">,</span> <span class="n">IllegalAccessException</span><span class="o">,</span> <span class="n">InvocationTargetException</span> <span class="o">{</span><br></span><span class="line"> <span class="n">Method</span> <span class="n">method</span> <span class="o">=</span> <span class="n">wifi</span><span class="o">.</span><span class="na">getClass</span><span class="o">().</span><span class="na">getMethod</span><span class="o">(</span><span class="s">"isWifiApEnabled"</span><span class="o">);</span><br></span><span class="line"> <span class="k">return</span> <span class="o">(</span><span class="n">Boolean</span><span class="o">)</span> <span class="n">method</span><span class="o">.</span><span class="na">invoke</span><span class="o">(</span><span class="n">wifi</span><span class="o">);</span><br></span><span class="line"> <span class="o">}</span><br></span></code></pre></td> <br> </tr></table></div></figure><p>配置AP要使用到WifiConfiguration这个类,以下是设置的一个AP。</p> <br><br><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr> <br><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></pre></td> <br><td class="code"><pre><code class="java"><span class="line"><span class="kd">private</span> <span class="n">WifiConfiguration</span> <span class="nf">getApConfiguration</span><span class="o">()</span> <span class="o">{</span><br></span><span class="line"> <span class="n">WifiConfiguration</span> <span class="n">apConfig</span> <span class="o">=</span> <span class="k">new</span> <span class="n">WifiConfiguration</span><span class="o">();</span><br></span><span class="line"> <span class="c1">//配置热点的名称</span><br></span><span class="line"> <span class="n">apConfig</span><span class="o">.</span><span class="na">SSID</span> <span class="o">=</span> <span class="s">"yourId"</span><span class="o">;</span><br></span><span class="line"> <span class="n">apConfig</span><span class="o">.</span><span class="na">allowedAuthAlgorithms</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">WifiConfiguration</span><span class="o">.</span><span class="na">AuthAlgorithm</span><span class="o">.</span><span class="na">OPEN</span><span class="o">);</span><br></span><span class="line"> <span class="n">apConfig</span><span class="o">.</span><span class="na">allowedKeyManagement</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">WifiConfiguration</span><span class="o">.</span><span class="na">KeyMgmt</span><span class="o">.</span><span class="na">WPA_PSK</span><span class="o">);</span><br></span><span class="line"> <span class="n">apConfig</span><span class="o">.</span><span class="na">allowedProtocols</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">WifiConfiguration</span><span class="o">.</span><span class="na">Protocol</span><span class="o">.</span><span class="na">RSN</span><span class="o">);</span><br></span><span class="line"> <span class="n">apConfig</span><span class="o">.</span><span class="na">allowedProtocols</span><span class="o">.</span><span class="na">set</span><span class="o">(</span><span class="n">WifiConfiguration</span><span class="o">.</span><span class="na">Protocol</span><span class="o">.</span><span class="na">WPA</span><span class="o">);</span><br></span><span class="line"> <span class="c1">//配置热点的密码</span><br></span><span class="line"> <span class="n">apConfig</span><span class="o">.</span><span class="na">preSharedKey</span> <span class="o">=</span> <span class="s">"yourPassword"</span><span class="o">;</span><br></span><span class="line"> <span class="k">return</span> <span class="n">apConfig</span><span class="o">;</span><br></span><span class="line"> <span class="o">}</span><br></span></code></pre></td> <br> </tr></table></div></figure><p>应用AP配置并启用AP要使用另一个被隐藏的方法<code>setWifiApEnabled</code>。<strong>需要注意的是启用AP前要将当前手机的wifi关闭,否则会启动失败。</strong></p> <br><br><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr> <br><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br></pre></td> <br><td class="code"><pre><code class="java"><span class="line"> <span class="kd">private</span> <span class="kt">void</span> <span class="nf">setWifiAp</span><span class="o">()</span> <span class="o">{</span><br></span><span class="line"><br></span><span class="line"><br></span><span class="line"> <span class="n">Method</span> <span class="n">method</span> <span class="o">=</span> <span class="n">wifi</span><span class="o">.</span><span class="na">getClass</span><span class="o">().</span><span class="na">getMethod</span><span class="o">(</span><br></span><span class="line"> <span class="s">"setWifiApEnabled"</span><span class="o">,</span> <span class="n">WifiConfiguration</span><span class="o">.</span><span class="na">class</span><span class="o">,</span> <span class="n">Boolean</span><span class="o">.</span><span class="na">TYPE</span><span class="o">);</span><br></span><span class="line"><br></span><span class="line"> <span class="n">wifi</span><span class="o">.</span><span class="na">setWifiEnabled</span><span class="o">(</span><span class="kc">false</span><span class="o">);</span><br></span><span class="line"> <span class="n">method</span><span class="o">.</span><span class="na">invoke</span><span class="o">(</span><span class="n">wifi</span><span class="o">,</span> <span class="kc">null</span><span class="o">,</span> <span class="kc">true</span><span class="o">);</span><br></span><span class="line"> <span class="o">}</span><br></span></code></pre></td> <br> </tr></table></div></figure><p>最后,一定要注意要在AndroidManifest.xml文件中设置几个权限。否则在调用API时会产生<code>java.lang.SecurityException: Permission Denied</code>的异常。<br>需要加入的权限如下:</p> <br><br><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr> <br><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></pre></td> <br><td class="code"><pre><code class="xml"><span class="line"><span class="nt">&lt;uses-permission</span> <span class="na">android:name=</span><span class="s">"android.permission.ACCESS_NETWORK_STATE"</span> <span class="nt">/&gt;</span><br></span><span class="line"><span class="nt">&lt;uses-permission</span> <span class="na">android:name=</span><span class="s">"android.permission.ACCESS_WIFI_STATE"</span> <span class="nt">/&gt;</span><br></span><span class="line"><span class="nt">&lt;uses-permission</span> <span class="na">android:name=</span><span class="s">"android.permission.CHANGE_WIFI_STATE"</span> <span class="nt">/&gt;</span><br></span><span class="line"><span class="nt">&lt;uses-permission</span> <span class="na">android:name=</span><span class="s">"android.permission.CHANGE_NETWORK_STATE"</span> <span class="nt">/&gt;</span><br></span></code></pre></td> <br> </tr></table></div></figure><p>源码我已经放置到github上了,需要的请自行checkout。地址是:<a href="https://github.com/huangbowen521/APSwitch">https://github.com/huangbowen521/APSwitch</a></p> <br> </div></article>

本文链接

分享到:
评论

相关推荐

    C#调用api接口

    C#调用API接口 本文将详细介绍如何在C#中调用API函数获取系统信息。API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法...

    android常用的API接口调用

    Android 常用的 API 接口调用 Android 操作系统提供了许多有用的 API 接口,开发者可以通过这些接口调用来实现各种功能。本文将对 Android 常用的 API 接口调用进行归类和详细介绍。 显示网页 要在 Android 应用...

    C#调用API修改系统时间

    C#调用API修改系统时间,适合新手使用。

    C#调用API教程

     C# API大全pdf,内容涉及使用C#调用windows API 入门:  一:入门,直接从C# 调用DLL 导出  二.背后的原理―― 知其所以然,相关的知识  从.NET 平台调用Win32 API的一些基础知识以及编程实例,windows ...

    android studio调用API登录注册DEMO

    使用android studio调用AP接口判断登录注册是否成功

    LabVIEW中如何调用WindowsAPI.pdf

    LabVIEW 中如何调用 Windows API LabVIEW 作为一个图形化编程语言,提供了许多有用的功能模块,但是在某些情况下,仍然需要调用 Windows API 来实现特定的功能。那么,如何在 LabVIEW 中调用 Windows API 呢? ...

    C#中调用API,介绍API的使用

    C#中调用API C#中调用API C#中调用API C#中调用API

    Xamarin android调用web api入门示例

    Xamarin android调用web api入门示例

    API是什么,怎么调用API,API调用详解

    API是什么,怎么调用API,API调用详解。本文档详细解释了API是什么,以及如何调用API。讲解API的数据格式以及各个返回码的含义。

    VBS调用API必须使用的dll_dynwrap

    在vbs中调用win32 api,使VBS如虎添翼。

    api.zip_API_调用API

    API功能控件,包含所有API函数,及相关调用过程。

    C#调用API 资料

    c# 调用api 的一些资料。“★(不错的例子)用C#调用Windows API和其它进程通信”“C#和内存指针.doc“”C#中调用Windows API的要点“”c语言调用api_C#中调用API“”用Visual C#调用Windows API函数

    python调用api

    python调用api代码。实现api的调用,参数的设置、返回信息的处理等。

    斑马打印机官方API及调用样例android版

    斑马打印机官方API及调用样例android版

    C#中调用API C#中调用API

    API(Application Programming Interface),我想大家不会陌生,它是我们Windows编程的常客,虽然基于.Net平台的C#有了强大的类库,但是,我们还是不能否认API在Windows编程中的重要性。大多数的编程语言都支持API编程...

    VB如何动态调用API的方法演示.rar

    VB如何动态调用API的方法演示,最简单的调用API函数,动态调用API函数显示的MSGBOX内容,下面将要在作面画一笔。  函 数 名:ExecuteAPI  输入 :LIBPath(String) - 刷新的目标窗口句柄,可为0  APIScript...

    Labivew调用Windows API函数实现VI窗口置顶

    Labivew 调用 Windows API 函数实现 VI 窗口置顶 LabVIEW 是一个非常流行的虚拟仪器开发平台,通过调用 Windows API 函数可以实现 VI 窗口置顶。下面我们将详细介绍如何通过 LabVIEW 调用 Windows API 函数来实现 ...

    易语言不声明api函数直接动态调用api源码

    易语言不声明api函数直接动态调用api源码

    Android 调用远程API实现在线翻译单词功能.rar

    Android调用google翻译的javascript实现翻译单词功能,在线翻译,用户输入单词,就可。  WebSettings webSettings = wv.getSettings();//取得WebSettings  webSettings.setJavaScriptEnabled(true);//设定可执行...

    VB调用API函数方法详解

    VB调用API函数方法,以一简单的例题做详细说明。非常适合初学者想了解API函数的朋友

Global site tag (gtag.js) - Google Analytics