Android
Unity
SSID

AndroidでSSID取得(Unityでビルド)

More than 1 year has passed since last update.


概要

UnityでビルドしたAndroidアプリで、SSIDを取得する。

端末が受信したSSID一覧を取得する。


環境

Unity
5.6.0f3 on macOS

AndroidStudio
2.3.1

実機端末
VAIO PHONE Android6.0.1


作業


1:UnityにAndroid用プラグインを追加

参考:http://indie-du.com/entry/2016/07/14/200000

上記を参考に、アラートが出るのを確認する。

僕は、Log.dで確認しました


2:Javaのソースを改造する

*参考サイトとは、パッケージ名、クラス名が違うので、注意。


SSIDManager.java

package com.exsample.android.mock.sakuma.myssid;

import android.content.Context;
import android.util.Log;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import java.util.List;

public class SSIDManager {

static public void getSSID(Context context){

Log.d("testLog:","aaaa");

final WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (manager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
manager.startScan();
List<ScanResult> results = manager.getScanResults();

Log.d("testLog:","bbbb" + results.size());
final String[] items = new String[results.size()];
for (int i=0;i<results.size();++i) {
items[i] = results.get(i).SSID;
Log.d("testLog:", items[i]);
}

}

Log.d("testLog:","cccc");

}
}



3:パーミッション追加

SSID取得するために、パーミッション追加


AndroidManifest.xml

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

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

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



4:ライブラリ作成し、Unityにインポート

1の参考サイトどおりに、aarファイルを作成し、

Unityにインポート


5:Unity呼び出し元を修正


SceneManager.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;

public class SceneManager : MonoBehaviour {

// Use this for initialization
void Start () {
#if UNITY_ANDROID
AndroidJavaClass ssidManager = new AndroidJavaClass ("com.exsample.android.mock.sakuma.myssid.SSIDManager");

// Context(Activity)オブジェクトを取得する
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject context = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
context.Call ("runOnUiThread", new AndroidJavaRunnable(() => {

// staticメソッドを呼び出す
ssidManager.CallStatic (
"getSSID",
context
);
}));

#endif
}

// Update is called once per frame
void Update () {

}
}



6:ビルドして終わり

端末で実行

ログにSSIDが出力されるはず


補足

Android6からACCESS_FINE_LOCATIONのパーミッションがないと

SSID取得できないっぽい。