【发布时间】: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