我需要使用自定义ssid和密码创建一个wifi接入点。我查看了互联网,大部分答案都是通过反射使用WifiManger#setWifiApEnabled。但是,当我检查source时,它说api已被弃用,并且在方法内部也没有启动Access点只是给出一个警告日志。
@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。看起来它可以启动Access Point,但我无法看到我应该在哪里提供我的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);
}
}
此外,我希望我的应用程序支持min api 16(软糖)和最大的oreo。 或者我应该强迫用户设置Wifi网络?
答案 0 :(得分:1)
我认为不可能在oreo或更高版本上启动自定义wifi热点。有一个名为ShareIt的文件传输应用程序,它在接收模式下启动自定义wifi热点。如果在oreo上运行,它会创建一个名为Android-blah的热点,其中包含随机密码,并要求发件人手动输入该密码以便发送该文件。可能是android正在强迫/建议其开发人员使用其他无线技术(如Wifi direct)来进行这类操作。