`

调用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>

本文链接

分享到:
评论

相关推荐

    百度地图API调用Demo

    【百度地图API调用Demo】是一个专为Android开发者设计的示例项目,它全面展示了如何在移动应用中集成和利用百度地图API实现各种功能。这个Demo涵盖了百度地图API的大部分基本功能,对于初学者来说,这是一个很好的...

    百度地图api定位(Android)

    【百度地图API定位(Android)】是Android应用开发中的一个重要环节,它允许用户在应用程序中获取当前位置、导航、搜索地点等功能。在这个项目中,开发者已经完成了一个可运行的示例,并且进行了测试,确保了其功能...

    安卓调用百度地图实现

    在安卓应用开发中,调用百度地图API是常见的需求,特别是在构建导航、定位或地理信息服务相关的应用程序时。本文将深入探讨如何在Android平台上集成百度地图API,实现定位和搜索功能。 首先,集成百度地图API需要在...

    Android源码——百度地图API-定位周边搜索POI源码.7z

    开发者需要集成`baidumap-sdk`库,然后创建`LocationClient`对象,设置监听器`LocationListener`,通过调用`requestLocation()`方法启动定位服务。定位结果会通过`onLocationChanged(Location location)`方法回调,...

    android调用百度地图的覆盖层

    在Android开发中,集成地图功能是一项常见的需求,而百度地图API为开发者提供了丰富的地图操作接口。本篇将详细讲解如何在Android应用中调用百度地图并实现自定义覆盖层,以便将数据可视化地展示在地图上。 首先,...

    安卓Android源码——百度地图API-定位周边搜索POI源码.zip

    在安卓开发中,掌握如何利用第三方地图API进行位置服务是至关重要的。本示例源码主要涉及了Android平台上的百度地图API,它提供了丰富的定位和地图功能,包括但不限于获取用户当前位置、搜索周边兴趣点(POI)等。...

    Android 百度地图API-定位周边搜索POI源码.7z

    在Android开发中,百度地图API是一个非常重要的工具,它提供了丰富的功能,如定位、地图展示、路线规划、周边搜索等。这个"Android 百度地图API-定位周边搜索POI源码.7z"文件应该包含了一个完整的示例项目,用于演示...

    Android 百度地图API-定位周边搜索POI源码

    调用百度地图API的`PoiSearch`类,设置搜索参数并发起请求: ```java PoiSearch poiSearch = new PoiSearch(this, PoiSearch.QueryBuilder().around(latitude, longitude, 1000).keyword("餐馆").build()); ...

    安卓wifi蓝牙相关-android代码设置AP热点仅供参考.rar

    本资源“安卓wifi蓝牙相关-android代码设置AP热点仅供参考.rar”似乎包含了一些用于通过Android代码来设置Wi-Fi接入点(Access Point, AP)热点的示例,这些代码可能对开发者进行相关功能开发时提供参考。...

    Android高级应用源码-Android 百度地图API-定位周边搜索POI源码.zip

    该压缩包包含的是一个基于Android平台的高级应用源码,主要使用了百度地图API来实现定位及周边搜索功能。在Android开发中,这样的应用是非常常见的,它涉及到许多关键的Android和百度地图API技术。以下是对这些知识...

    高德地图集成:定位功能 关键字检索POI 获取附近位置列表

    在创建应用后,会得到一个API密钥(Key),这个Key是后续调用API的关键。 2. **添加依赖** 对于Android应用,需要在`build.gradle`文件中引入高德地图SDK依赖。例如: ```gradle implementation '...

    Android 调用GoogleMap源码,点击事件在注释里面-IT计算机-毕业设计.zip

    在Android应用开发中,集成Google Maps API是一项常见的需求。这篇毕业设计示例代码主要展示了如何在Android项目中调用Google Map并实现地图上的点击事件。本文将深入解析这个主题,帮助你理解Android与Google Maps ...

    Android应用源码之调用GoogleMap源码,点击事件在注释里面.zip

    在Android应用开发中,集成和使用Google Maps API是一项常见的任务,尤其对于构建地理位置相关的应用程序至关重要。这份名为"Android应用源码之调用GoogleMap源码,点击事件在注释里面.zip"的压缩包,显然是一个示例...

    安卓开发-百度地图API 之 定位周边搜索POI.zip.zip

    本教程将深入探讨如何在Android平台上利用百度地图API实现定位功能以及搜索周边的POI(Point of Interest,兴趣点)。 一、百度地图API简介 百度地图API为开发者提供了丰富的地图功能,包括地图展示、定位、路线...

    Android高级应用源码-调用GoogleMap源码,点击事件在注释里面.zip

    这份"Android高级应用源码-调用GoogleMap源码,点击事件在注释里面.zip"提供了关于如何在Android应用中集成并使用Google Maps API的具体示例。下面将详细解释其中涉及的关键知识点。 首先,我们要了解Google Maps ...

    android 基于基站,apn,gps,wifi,network 根据不同手机sim卡获取经纬度

    3. **WiFi定位(WiFi Access Point)**:通过分析周围WiFi热点的MAC地址和已知的WiFi热点数据库来定位。这种方式在室内效果较好,但需要大量的WiFi热点数据支持。同样可以通过`LocationManager`服务的`passive`或`...

    安卓开发-百度手机地图 实例集合.zip

    在安卓应用开发中,百度地图API是一个非常重要的工具,它为开发者提供了丰富的地图功能,如定位、路线规划、地图展示等。本实例集合主要聚焦于如何在安卓项目中集成和利用百度地图SDK来实现各种实用功能。下面我们将...

    设置AP热点

    在Android系统中,设置接入点(Access Point,简称AP)热点允许设备分享其移动数据连接,使得其他设备可以通过Wi-Fi连接到它,从而共享网络。这个功能通常被称为移动热点或便携式Wi-Fi热点。在本文中,我们将深入...

    安卓最新pppoe源码

    6. **权限设置**:确保你的应用具有必要的权限,如`INTERNET`和可能的`ACCESS_NETWORK_STATE`。 7. **测试**:在安卓设备上运行应用,尝试拨号连接,检查日志输出以确认连接状态和错误信息。 总的来说,安卓最新...

    PrintDemo (Android打印程序demo,适用于移动终端pos机)

    PrintDemo是一款专为Android平台设计的打印程序演示应用,它主要服务于移动终端的POS(Point of Sale)设备。这个程序的目的是提供一个基础框架,帮助开发者理解和实现Android系统中的打印功能,尤其对于那些需要在...

Global site tag (gtag.js) - Google Analytics