java.lang.NoSuchMethodError: No virtual method getSoftApConfiguration()Landroid/net/wifi/SoftApConfi

	hotspotReservation = reservation;
    WifiConfiguration currentConfig = hotspotReservation.getWifiConfiguration();
    printCurrentConfig(currentConfig);
	需要复制后调用 不然就
	java.lang.NoSuchMethodError: No virtual method getSoftApConfiguration()Landroid/net/wifi/SoftApConfiguration; in class Landroid/net/wifi/WifiManager$LocalOnlyHotspotReservation; or its super classes (declaration of 'android.net.wifi.WifiManager$LocalOnlyHotspotReservation' appears in /system/framework/framework.jar!classes2.dex)

startLocalOnlyHotspot
在API 级别 26 中添加

public void startLocalOnlyHotspot (WifiManager.LocalOnlyHotspotCallback callback,
Handler handler)
请求一个仅限本地的热点,应用程序可以使用该热点在连接到创建的 WiFi 热点的共置设备之间进行通信。此方法创建的网络将无法访问 Internet。每个应用程序可以对热点发出单个请求,但多个应用程序可以同时请求热点。当多个应用程序同时成功注册时,它们将共享底层热点。LocalOnlyHotspotCallback#onStarted(LocalOnlyHotspotReservation)当热点准备好供应用程序使用时调用。

每个应用程序都可以对该方法进行一次主动调用。该WifiManager.LocalOnlyHotspotCallback.onStarted(android.net.wifi.WifiManager.LocalOnlyHotspotReservation)回调用品与请求者LocalOnlyHotspotReservation包含 SoftApConfiguration有连接到该热点所需要的SSID,安全类型和凭据。传达此信息取决于应用程序。

如果无法创建 LocalOnlyHotspot,LocalOnlyHotspotCallback#onFailed(int) 则将调用该方法。示例故障包括网络错误或操作模式不兼容。例如,如果用户当前正在使用 Wifi Tethering 向另一台设备提供上游,则 LocalOnlyHotspot 将不会由于不兼容的模式而启动。可能的错误代码包括: LocalOnlyHotspotCallback#ERROR_NO_CHANNEL, LocalOnlyHotspotCallback#ERROR_GENERIC, LocalOnlyHotspotCallback#ERROR_INCOMPATIBLE_MODE和 LocalOnlyHotspotCallback#ERROR_TETHERING_DISALLOWED。

在内部,将跟踪请求以防止热点在应用程序仍在使用时被拆除。当不再需要使用 LocalOnlyHotspot 时,应关闭调用中LocalOnlyHotspotReservation传递的对象 。由于热点可能会被多个应用程序共享,删除最终注册的应用程序请求将触发热点拆卸。这意味着应用程序不应通过侦听包含 wifi 状态的广播来确定热点在使用完毕后是否已停止。此外,一旦被调用,应用程序将不会收到任何类型的回调。 WifiManager.LocalOnlyHotspotCallback.onStarted(android.net.wifi.WifiManager.LocalOnlyHotspotReservation)LocalOnlyHotspotReservation#close()LocalOnlyHotspotReservation#close()

应用程序应该知道用户也可以通过设置 UI 停止 LocalOnlyHotspot;只要有请求的应用程序,它就不能保证熬夜。将通过 将这种情况通知请求者 LocalOnlyHotspotCallback#onStopped()。其他情况可能会出现热点被拆除(紧急模式等)。应用程序开发人员应该知道它可能会意外停止,但如果他们正确注册,他们会收到通知。

应用程序还应该知道这个网络将与其他应用程序共享。应用程序负责保护其在此网络上的数据(例如 TLS)。

package com.fotric.iriatool.utils;

import android.annotation.SuppressLint;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Handler;
import android.util.Log;

import androidx.annotation.RequiresApi;

/**
 * WifiHotstopManager class makes use of the Android's WifiManager and WifiConfiguration class
 * to implement the wifi hotspot feature.
 * Created by zhubinsheng on 11/8/2021.
 */
@SuppressLint("MissingPermission")
public class WifiHotspotManager {
  private static final String TAG = "WifiHotspotManager";
  private WifiManager wifiManager;
  private WifiManager.LocalOnlyHotspotReservation hotspotReservation;

  public WifiHotspotManager(Context context) {
    wifiManager  = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
  }

  //Workaround to turn on hotspot for Oreo versions
  @RequiresApi(api = Build.VERSION_CODES.O)
  public void turnOnHotspot() {
    wifiManager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback() {

      @Override
      public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) {
        super.onStarted(reservation);
        hotspotReservation = reservation;
        WifiConfiguration currentConfig = hotspotReservation.getWifiConfiguration();

        printCurrentConfig(currentConfig);
        Log.v(TAG, "Local Hotspot Started");
      }

      @Override
      public void onStopped() {
        super.onStopped();
        Log.v(TAG, "Local Hotspot Stopped");
      }

      @Override
      public void onFailed(int reason) {
        super.onFailed(reason);
        Log.v(TAG, "Local Hotspot failed to start");
      }
    }, new Handler());
  }

  //Workaround to turn off hotspot for Oreo versions
  @RequiresApi(api = Build.VERSION_CODES.O)
  public void turnOffHotspot() {
    if (hotspotReservation != null) {
      hotspotReservation.close();
      hotspotReservation = null;
      Log.v(TAG, "Turned off hotspot");
    }
  }

  //This method checks the state of the hostpot for devices>=Oreo
  @RequiresApi(api = Build.VERSION_CODES.O)
  public boolean isHotspotStarted() {
    return hotspotReservation != null;
  }

  private void printCurrentConfig(WifiConfiguration wifiConfiguration) {
    Log.v(TAG, "THE PASSWORD IS: "
        + wifiConfiguration.preSharedKey
        + " \n SSID is : "
        + wifiConfiguration.SSID);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值