Android
 Computer >> コンピューター >  >> プログラミング >> Android

Kotlinを使ってプログラムからAndroidのWi-Fiネットワークに接続する方法

はじめに

この記事では、Kotlinを使ってAndroid端末のWi-Fiをプログラムから操作し、ネットワーク接続の有効化・無効化を行う方法を解説します。SwitchウィジェットをタップするだけでWi-FiのON/OFFを切り替えられる、シンプルなサンプルアプリを題材にしていきます。

開発の流れ

ステップ1:新しいプロジェクトを作成する

Android Studioを起動し、「File」→「New Project」から新規プロジェクトを作成します。必要な情報を入力してプロジェクトの雛形を生成してください。

ステップ2:レイアウトファイル(activity_main.xml)の作成

res/layout/activity_main.xml に以下のコードを記述します。

画面には上部にタイトル用のTextView、中央にWi-Fiの状態を表示するTextView、そして切り替え用のSwitchを配置しています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="70dp"
        android:background="#008080"
        android:padding="5dp"
        android:text="TutorialsPoint"
        android:textColor="#fff"
        android:textSize="24sp"
        android:textStyle="bold" />

    <Switch
        android:id="@+id/switchWifi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/switchWifi"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="30dp"
        android:text="WiFi OFF"
        android:textColor="@android:color/background_dark"
        android:textSize="24sp"
        android:textStyle="bold|italic" />

</RelativeLayout>

ステップ3:MainActivity.kt の実装

src/MainActivity.kt に以下のコードを記述します。

Switchのチェック状態が変わったタイミングで、Wi-Fiを有効化する enableWiFi() と無効化する disableWiFi() を呼び分けています。WIFI_SERVICEWifiManager を取得し、isWifiEnabled プロパティを切り替えることでWi-Fiの状態を制御できます。

import android.content.Context
import android.net.wifi.WifiManager
import android.os.Bundle
import android.widget.Switch
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity

@Suppress("DEPRECATION")
class MainActivity : AppCompatActivity() {

    private lateinit var wifiButton: Switch
    lateinit var textView: TextView
    lateinit var wifiManager: WifiManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        title = "KotlinApp"

        textView = findViewById(R.id.textView)
        wifiButton = findViewById(R.id.switchWifi)

        wifiButton.setOnCheckedChangeListener { _, isChecked ->
            if (isChecked) {
                textView.text = "WIFI ON"
                enableWiFi()
            } else {
                textView.text = "WIFI OFF"
                disableWiFi()
            }
        }
    }

    private fun enableWiFi() {
        wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
        wifiManager.isWifiEnabled = true
        Toast.makeText(this, "Wifi Enabled", Toast.LENGTH_SHORT).show()
    }

    private fun disableWiFi() {
        wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
        wifiManager.isWifiEnabled = false
        Toast.makeText(this, "Wifi Disabled", Toast.LENGTH_SHORT).show()
    }
}

ステップ4:AndroidManifest.xml にパーミッションを追加

androidManifest.xml に以下のコードを追加します。Wi-Fiの状態を取得するための「ACCESS_WIFI_STATE」と、Wi-Fiの状態を変更するための「CHANGE_WIFI_STATE」の2つのパーミッション宣言が必要です。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11">

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

アプリの実行と動作確認

それでは、アプリを実行してみましょう。実機のAndroidスマートフォンをパソコンに接続しているものとします。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーのRunアイコン Kotlinを使ってプログラムからAndroidのWi-Fiネットワークに接続する方法 をクリックしてください。接続済みのモバイルデバイスを選択すると、実機の画面にアプリが起動します。

Kotlinを使ってプログラムからAndroidのWi-Fiネットワークに接続する方法

Kotlinを使ってプログラムからAndroidのWi-Fiネットワークに接続する方法

注意点:Android 10(API 29)以降での挙動

WifiManagersetWifiEnabledisWifiEnabled への代入)は、Android 10(API 29)以降で非推奨となり、サードパーティ製アプリからの直接的なWi-FiのON/OFFはできなくなりました。Android 10以降を対象とする場合は、Settings.Panel.ACTION_WIFI インテントでWi-Fi設定パネルを表示し、ユーザー自身に切り替えてもらう方式が推奨されています。本記事のコードは、Android 9(API 28)以前の環境で動作させる場合に有効ですので、実際に利用する際は対象OSバージョンに合わせて実装方法を選択してください。

  1. Androidで隠し(ステルス)Wi-Fiネットワークに接続する方法

    通常の方法では、隠しWi-Fiネットワークには接続できません。隠しネットワークは端末の利用可能なネットワーク一覧に表示されないため、別の手順を踏む必要があります。では、どのように接続すればよいのでしょうか? この記事では、Androidで隠しWi-Fiネットワークに接続する方法を詳しく解説します。 隠しWi-Fiネットワークとは? 隠しネットワークとは、SSID(Wi-Fiの名前)をブロードキャストしないネットワークのことです。そのため、端末のWi-Fi設定画面で「利用可能なネットワーク」の一覧を開いても表示されず、自動的に検出されることもありません。 SSIDを非公開にしているということは、

  2. 【Android】WPSを使ってWi-Fiネットワークに接続する方法を徹底解説

    無線ネットワークにもっと手軽に接続したいなら、AndroidのWPS機能の活用がおすすめです。ただし、Android 9以降のバージョンではこの機能が利用できない場合がある点に注意が必要です。本記事では、WPSプッシュボタンを使ってAndroid端末をWi-Fiに接続する具体的な方法を詳しく解説します。 AndroidでWPSを使ってWi-Fiネットワークに接続する方法 WPS(Wi-Fi Protected Setup)は、ルーターとデバイス間の接続をより速く、より簡単に行うための機能です。2006年にCisco社によって導入されました。これは、パスワードで暗号化された無線ネットワークに