
Комментарии 6
Эээ, как то я не проникся темой. Почему просто не сделать вот так?
Samsung s24fe

Что-то тут дофига геморроя и весь он нужен ТОЛЬКО для плей стора.
Если решать задачу "для себя", как описано в истории с плеером из машины, то сам хотспот поднять вообще несложно и вот это ВСЕ права, которые надо запросить по части WiFi:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" />
В .NET Android есть формат вызова нативных "скрытых" java функций самой ОС Андроид.
Для любой версии 13+ я писал когда-то для себя вот такое (При этом эта функция мне нужна была не просто, чтобы хотспот поднять, а чтобы поднять его с КОНКРЕТНЫМ SSID и паролем, что так-то считается сейчас супер-небезопасным и поэтому нужны скрытые API)
public void StartHotspot()
{
var wifiManager = (WifiManager)main.GetSystemService(Context.WifiService);
if (wifiManager is null) return;
try
{
var builderClass = Java.Lang.Class.ForName("android.net.wifi.SoftApConfiguration$Builder");
var configClass = Java.Lang.Class.ForName("android.net.wifi.SoftApConfiguration");
var builderInstance = builderClass.GetConstructor().NewInstance();
//Установка названия сети (у меня глобальная переменная ssid)
Method setSsidMethod = builderClass.GetMethod("setSsid", Java.Lang.Class.FromType(typeof(Java.Lang.String)));
setSsidMethod.Invoke(builderInstance, new Java.Lang.String(ssid));
//Установка пароля (у меня глобальная переменная password)
Method setPassphraseMethod = builderClass.GetMethod("setPassphrase",
Java.Lang.Class.FromType(typeof(Java.Lang.String)),
Java.Lang.Integer.Type);
setPassphraseMethod.Invoke(builderInstance, new Java.Lang.String(password), 1);
Method setBandMethod = builderClass.GetMethod("setBand", Java.Lang.Integer.Type);
setBandMethod.Invoke(builderInstance, 1);
Method buildMethod = builderClass.GetMethod("build");
var customConfig = buildMethod.Invoke(builderInstance);
// Вызов скрытой WifiManager.startLocalOnlyHotspot(config, executor, callback)
var handler = new CustomHotspotCallback(this);
var mainExecutor = ContextCompat.GetMainExecutor(main);
var callbackClass = Java.Lang.Class.ForName("android.net.wifi.WifiManager$LocalOnlyHotspotCallback");
Method startHotspotMethod = wifiManager.Class.GetMethod("startLocalOnlyHotspot",
configClass,
Java.Lang.Class.FromType(typeof(Java.Util.Concurrent.IExecutor)),
callbackClass);
Java.Lang.Object[] methodArgs = new Java.Lang.Object[]
{
(Java.Lang.Object)customConfig,
(Java.Lang.Object)mainExecutor,
handler
};
startHotspotMethod.Invoke(wifiManager, methodArgs);
}
catch (System.Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Ошибка запуска спота: {ex.Message}");
}
}Насколько помню, работало простой установкой через ADB без каких-либо рутовых прав
P.S. На новых версия андроида (16+) будет создавать стандартную точку с генерацией SSID и пароля, даже если указать их кастомно, но в сценарии автора и это подходит
Включение HotSpot Android по триггеру BT