LoginSignup
4
5

More than 5 years have passed since last update.

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

Posted at

概要

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取得できないっぽい。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5