2015-12-09 5 views
7

次のコードを使用して、Android MarshmallowでWi-Fiテザリングホットスポットを作成しようとしました。Android MarshmallowでWi-Fiテザリングホットスポットを作成するには?

public class WifiAccessManager { 

private static final String SSID = "1234567890abcdef"; 
public static boolean setWifiApState(Context context, boolean enabled) { 
    //config = Preconditions.checkNotNull(config); 
    try { 
     WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     if (enabled) { 
      mWifiManager.setWifiEnabled(false); 
     } 
     WifiConfiguration conf = getWifiApConfiguration(); 
     mWifiManager.addNetwork(conf); 

     return (Boolean) mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class).invoke(mWifiManager, conf, enabled); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

public static WifiConfiguration getWifiApConfiguration() { 
    WifiConfiguration conf = new WifiConfiguration(); 
    conf.SSID = SSID; 
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
    return conf; 
} 

}

しかし、それは、次のアクセス許可の問題を示しています。 。

java.lang.SecurityException: googleplus.tarun.info.hotspotcreation was not granted either of these permissions: android.permission.CHANGE_NETWORK_STATE, android.permission.WRITE_SETTINGS. 

しかし、すでにマニフェストに追加しました。 。

どうすれば問題を解決できますか?

答えて

-1

Android Mはプログラムでホットスポットを作成することはできません。マシュマロユーザーは設定ページにアクセスして、自分でホットスポットを作成することができます。以下のコードは設定ページに行くのに役立ちます。

startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK)); 
1

私はAndroid Marshmallowで働いていて、下記のようにWiFiテザリングを作成する方法を見つけました。あなたのアプリでWifiConfigurationオブジェクトの状態を変更できるようになりました(これらのオブジェクトを作成した場合のみ)。また、Android 6.0(APIレベル23)以降、ユーザーはアプリのインストール時ではなく、アプリの実行中にアプリに権限を与えます。 Read this article to know more about this.自分でホットスポットを作成しているのがわかります。だから問題はない。マニフェストでの許可は以下の通りである:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS"/> 

私はアンドロイドのマシュマロでのWi-Fiテザリングホットスポットを作成するには、次の機能を使用しています:

public void setWifiTetheringEnabled(boolean enable) { 
    //Log.d(TAG,"setWifiTetheringEnabled: "+enable); 
    String SSID=getHotspotName(); // my function is to get a predefined SSID 
    String PASS=getHotspotPassword(); // my function is to get a predefined a Password 

    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 

    if(enable){ 
     wifiManager.setWifiEnabled(!enable); // Disable all existing WiFi Network 
    }else { 
     if(!wifiManager.isWifiEnabled()) 
      wifiManager.setWifiEnabled(!enable); 
    } 
    Method[] methods = wifiManager.getClass().getDeclaredMethods(); 
    for (Method method : methods) { 
     if (method.getName().equals("setWifiApEnabled")) { 
      WifiConfiguration netConfig = new WifiConfiguration(); 
      if(!SSID.isEmpty() || !PASS.isEmpty()){ 
       netConfig.SSID=SSID; 
       netConfig.preSharedKey = PASS; 
       netConfig.hiddenSSID = false; 
       netConfig.status = WifiConfiguration.Status.ENABLED; 
       netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
       netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
       netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
       netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
       netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
       netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
       netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 
      } 
      try { 
       method.invoke(wifiManager, netConfig, enable); 
       Log.e(TAG,"set hotspot enable method"); 
      } catch (Exception ex) { 
      } 
      break; 
     } 
    } 
} 

をホットスポット関数呼び出しがある有効:setWifiTetheringEnabled(true)と無効setWifiTetheringEnabled(false)のために。

これだけです。

N.B. SIMレスデバイスは、ホットスポットを使用するためにサポートされていないことに注意してください。 root以外のデバイスでホットスポットを作成することはできません。

今後の訪問者に役立つことを願っています。

関連する問題