【问题标题】:How to start wifi hotspot with custom (ssid and password )configuration using ConnectivityManager?如何使用 ConnectivityManager 使用自定义(ssid 和密码)配置启动 wifi 热点?
【发布时间】:2018-08-26 06:19:00
【问题描述】:

我需要使用自定义 ssid 和密码创建一个 wifi 接入点。我在互联网上查看,大多数答案都是通过反射使用 WifiManger#setWifiApEnabled 的。但是,当我检查source 时,它说 api 已被弃用,并且在它不启动接入点的方法内部也只是给出了一个警告日志。

 @SystemApi
    @Deprecated
    @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)
    public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
        String packageName = mContext.getOpPackageName();

        Log.w(TAG, packageName + " attempted call to setWifiApEnabled: enabled = " + enabled);
        return false;
    }

在方法的描述中,它说使用ConnectivityManager#startTethering。看起来它可以启动接入点,但我看不到我应该在哪里提供我的 WiFi 配置,因为该类适用于多种(蓝牙、lte 等)连接类型。

 @SystemApi
    @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)
    public void startTethering(int type, boolean showProvisioningUi,
            final OnStartTetheringCallback callback, Handler handler) {
        Preconditions.checkNotNull(callback, "OnStartTetheringCallback cannot be null.");

        ResultReceiver wrappedCallback = new ResultReceiver(handler) {
            @Override
            protected void onReceiveResult(int resultCode, Bundle resultData) {
                if (resultCode == TETHER_ERROR_NO_ERROR) {
                    callback.onTetheringStarted();
                } else {
                    callback.onTetheringFailed();
                }
            }
        };

        try {
            String pkgName = mContext.getOpPackageName();
            Log.i(TAG, "startTethering caller:" + pkgName);
            mService.startTethering(type, wrappedCallback, showProvisioningUi, pkgName);
        } catch (RemoteException e) {
            Log.e(TAG, "Exception trying to start tethering.", e);
            wrappedCallback.send(TETHER_ERROR_SERVICE_UNAVAIL, null);
        }
    }

我还希望我的应用程序支持最小 api 16(果冻豆)和最大奥利奥。 还是我应该强制用户设置 Wifi 网络?

【问题讨论】:

    标签: android android-wifi hotspot


    【解决方案1】:

    我认为不可能在 oreo 或更高版本上启动自定义 wifi 热点。有一个名为 ShareIt 的文件传输应用程序,它在接收模式下启动自定义 wifi 热点。如果在 oreo 上运行,它会使用随机密码创建一个名称通常为 Android-blah 的热点,并要求发送者手动输入该密码以发送该文件。可能是 android 正在强迫/建议其开发人员使用其他无线技术(如 Wifi direct)来执行此类操作。

    【讨论】:

    • 当 shareIt 在接收模式下启动自定义 wifi 热点时,它也会在用户进行扫描以进行身份​​验证时启动蓝牙并在发件人处启动,此时它也会启动发件人的蓝牙,所以我的问题是 shareIt 如何在帮助下做到这一点蓝牙。
    猜你喜欢
    • 2018-05-21
    • 2014-09-30
    • 2021-08-23
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多