70

プログラムで Android の WiFi ホットスポットをオン/オフする API はありますか?

オン/オフするには、どのメソッドを呼び出す必要がありますか?

更新: HotSpot を有効にして WiFi のオン/オフを切り替えるオプションがありますが、これは私にとっては良い解決策ではありません。

4

13 に答える 13

59

警告 この方法は 5.0 以降では機能しません。かなり古いエントリでした。

以下のクラスを使用して、設定を変更/確認しWifi hotspotます。

import android.content.*;
import android.net.wifi.*;
import java.lang.reflect.*;

public class ApManager {

//check whether wifi hotspot on or off
public static boolean isApOn(Context context) {
    WifiManager wifimanager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);     
    try {
        Method method = wifimanager.getClass().getDeclaredMethod("isWifiApEnabled");
        method.setAccessible(true);
        return (Boolean) method.invoke(wifimanager);
    }
    catch (Throwable ignored) {}
    return false;
}

// toggle wifi hotspot on or off
public static boolean configApState(Context context) {
    WifiManager wifimanager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
    WifiConfiguration wificonfiguration = null;
    try {  
        // if WiFi is on, turn it off
        if(isApOn(context)) {               
            wifimanager.setWifiEnabled(false);
        }               
        Method method = wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);                   
        method.invoke(wifimanager, wificonfiguration, !isApOn(context));
        return true;
    } 
    catch (Exception e) {
        e.printStackTrace();
    }       
    return false;
}
} // end of class

以下のアクセス許可を AndroidMainfest に追加する必要があります。

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

このスタンドアロンの ApManager クラスは、次のようにどこからでも使用できます。

ApManager.isApOn(YourActivity.this); // check Ap state :boolean
ApManager.configApState(YourActivity.this); // change Ap state :boolean

これが誰かを助けることを願っています

于 2014-05-14T09:43:00.373 に答える
4

警告 この方法は 5.0 以降では機能しません。かなり古いエントリでした。

次のコードを使用して、wifi ダイレクト状態をプログラムで有効化、無効化、およびクエリできます。

package com.kusmezer.androidhelper.networking;

import java.lang.reflect.Method;
import com.google.common.base.Preconditions;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.util.Log;

public final class WifiApManager {
      private static final int WIFI_AP_STATE_FAILED = 4;
      private final WifiManager mWifiManager;
      private final String TAG = "Wifi Access Manager";
      private Method wifiControlMethod;
      private Method wifiApConfigurationMethod;
      private Method wifiApState;

      public WifiApManager(Context context) throws SecurityException, NoSuchMethodException {
       context = Preconditions.checkNotNull(context);
       mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
       wifiControlMethod = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class,boolean.class);
       wifiApConfigurationMethod = mWifiManager.getClass().getMethod("getWifiApConfiguration",null);
       wifiApState = mWifiManager.getClass().getMethod("getWifiApState");
      }   
      public boolean setWifiApState(WifiConfiguration config, boolean enabled) {
       config = Preconditions.checkNotNull(config);
       try {
        if (enabled) {
            mWifiManager.setWifiEnabled(!enabled);
        }
        return (Boolean) wifiControlMethod.invoke(mWifiManager, config, enabled);
       } catch (Exception e) {
        Log.e(TAG, "", e);
        return false;
       }
      }
      public WifiConfiguration getWifiApConfiguration()
      {
          try{
              return (WifiConfiguration)wifiApConfigurationMethod.invoke(mWifiManager, null);
          }
          catch(Exception e)
          {
              return null;
          }
      }
      public int getWifiApState() {
       try {
            return (Integer)wifiApState.invoke(mWifiManager);
       } catch (Exception e) {
        Log.e(TAG, "", e);
            return WIFI_AP_STATE_FAILED;
       }
      }
}
于 2013-05-13T07:12:25.843 に答える
4

Android 8.0 には、ホットスポットを処理するための新しい API があります。私の知る限り、リフレクションを使用する古い方法はもう機能しません。参照してください:

Android デベロッパー https://developer.android.com/reference/android/net/wifi/WifiManager.html#startLocalOnlyHotspot(android.net.wifi.WifiManager.LocalOnlyHotspotCallback,%20android.os.Handler)

void startLocalOnlyHotspot (WifiManager.LocalOnlyHotspotCallback callback, 
                Handler handler)

アプリケーションが、作成された WiFi ホットスポットに接続された同じ場所にあるデバイス間の通信に使用できるローカルのみのホットスポットを要求します。この方法で作成されたネットワークには、インターネット アクセスがありません。

スタック オーバーフロー
Android 8.0 (Oreo) でプログラムで wifi ホットスポットをオン/オフする方法

ホットスポットがオンの場合、onStarted(WifiManager.LocalOnlyHotspotReservation 予約) メソッドが呼び出されます。WifiManager.LocalOnlyHotspotReservation 参照を使用して、close() メソッドを呼び出してホットスポットをオフにします。

于 2018-01-25T11:29:42.480 に答える
1

あなたの最善の策は、WifiManager クラスを見ることです。具体的にはsetWifiEnabled(bool)機能。

次のドキュメントを参照してください: http://developer.android.com/reference/android/net/wifi/WifiManager.html#setWifiEnabled(boolean)

使用方法に関するチュートリアル (必要なアクセス許可を含む) は、 http ://www.tutorialforandroid.com/2009/10/turn-off-turn-on-wifi-in-android-using.html にあります。

于 2011-06-18T07:43:01.517 に答える
-3
WifiManager wifiManager = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(status);

ステータスがどこにあるのtrueか、またはfalse

許可マニフェストを追加します。<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

于 2012-08-17T15:55:13.933 に答える