Приложение T-Mobile «Моя учетная запись» делает это, если вы подключены к Wi-Fi-соединению, оно сообщает вам, что его программа не будет работать через WiFi, а затем спрашивает пользователя, хотят ли они отключить Wi-Fi-соединение. вы выбираете «Нет», затем приложение закрывается, если вы выбираете «Да», приложение отключает ваше WiFi-соединение, а затем продолжает запуск.
Я думаю, что это хорошая модель для подражания, она гарантирует, что ваше приложение не запускается по WiFi, и позволяет пользователю решать, хотят ли они отключить Wi-Fi или нет. Усовершенствованием этой модели было бы включение Wi-Fi, когда пользователь отходит от вашего приложения.
Я не тестировал следующий код, но похоже, что он должен работать (изменено с здесь )
используйте следующие разрешения в манифесте
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
и вот какой-то фактический код для включения / выключения Wi-Fi
private WifiManager wifiManager;
@Override
public void onCreate(Bundle icicle)
{
....................
wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
if(wifiManager.isWifiEnabled())
{
wifiManager.setWifiEnabled(false);
}
else
{
wifiManager.setWifiEnabled(true);
}
}
Если вы не хотите идти по этому маршруту, похоже, вы сможете сказать телефону, что предпочитаете использовать мобильную сеть передачи данных, а не сеть Wi-Fi.
Android ConnectivityManager предлагает функцию setNetworkPreference . Эта функция на самом деле не документирована, так как вы можете сказать, если вы нажмете на ссылку. Я бы возился с этим, хотя, потому что определенные константы, кажется, намекают на то, что вы можете установить это либо в TYPE_MOBILE , либо в TYPE_WIFI , и есть константа DEFAULT_NETWORK_PREFERENCE а также определяется как 0x00000001, что совпадает с TYPE_WIFI. Поэтому попробуйте получить доступ к ConnectivityManager, позвонив по номеру
Context.getSystemService(Context.CONNECTIVITY_SERVICE);
, а затем попробуйте использовать функцию setNetworkPreference ().
По-видимому, для него не требуются какие-либо разрешения в манифесте, но может потребоваться разрешение CHANGE_NETWORK_STATE или что-то в этом роде.
Если вы подаете в суд на функцию setNetworkPreference, вероятно, было бы также лучше установить сетевое предпочтение обратно к его исходным значениям (полученным из getNetworkPreference)
Надеюсь, это поможет.