Android/KotlinでJINS MEME

2018年5月8日

JINS MEME SDKをKotlinで使ってみました。

 

アプリ登録

アプリID / アプリSecretが必要なのでdevelopersサイトで登録しましょう。

https://developers.jins.com/ja/apps/

SDK導入

developersサイトからダウンロードしたjarファイルをプロジェクトに導入しましょう。

スクリーンショット 2018-05-01 15.52.51

jarを右クリック「Add As Library」を選択し、対象プロジェクトを選択しOKでライブラリが反映されます。

build.gradleのdependenciesにMemeLibが追加されているはず。

 

Gson導入

SDKがGsonに依存しているので、こちらも追加しましょう。

build.gradleのdependenciesに以下を追加します。

implementation 'com.google.code.gson:gson:2.4

 

Permission設定

AndroidManifest.xml にパーミッションを追加します。

 <uses-permission android:name="android.permission.BLUETOOTH" />
 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

 

位置情報の許可設定

Android6.0以上はBLEのスキャンにACCESS_COARSE_LOCATION または ACCESS_FINE_LOCATIONのパーミッションが必要なので導線を用意しましょう。

MainActivity.kt
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
 != PackageManager.PERMISSION_GRANTED) { 
 // パーミッション要求
ActivityCompat.requestPermissions(this,
        arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
        REQUEST_PERMISSION)

return }

ダイアログが表示されるので、ユーザーからの選択結果を受け取ります。

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>,
 grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (requestCode == REQUEST_PERMISSION) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 許可された

        } else {
            // 拒否
        }
    }
}

 

アカウント認証

アカウント登録をした時のアプリIDとアプリSecretを用いて認証処理を行います。
// 登録時のアプリID、アプリSecretを設定
MemeLib.setAppClientID(this.applicationContext, APP_ID, APP_SECRET)
memeLib = MemeLib.getInstance()
認証処理が正しく行われればMemeLib.getInstance()からスキャン、接続、各コマンドの実行
が行えるようになります。
 

 

スキャン

デバイスを検索するためにスキャンを行います。

JINS MEME本体の電源を押して青点滅状態なら見つけてくれるはずです。

val status = memeLib?.startScan(MemeScanListener { address: String ->
    // スキャンできたデバイスのアドレスが通知される
})
if (status != MemeStatus.MEME_OK) {
    // スキャンに失敗
}
MemeStatusはアプリおよびSDK認証、JINS MEMEとの接続状況を知らせてくれます。

 

接続

あらかじめ接続時のListenerを定義しておきましょう。

private val memeConnectListener = object : MemeConnectListener {
    override fun memeConnectCallback(b: Boolean) {
        // 接続時のコールバック
    }

    override fun memeDisconnectCallback() {
        // 切断時のコールバック
    }
}
memeLib?.setMemeConnectListener(memeConnectListener)

スキャン時に受け取ったアドレスを指定してconnectするだけです。

if (memeLib?.isScanning!!) {
    // スキャンは止めておく
    memeLib?.stopScan()
}
memeLib?.connect(address)

 

データ取得

接続できたらJINS MEMEが収集しているデータを取得してみましょう。

memeLibをリアルタイムモードにする必要があります。

private val memeRealTimeListener: MemeRealtimeListener =
 MemeRealtimeListener { memeRealtimeData ->
  // リアルタイムデータが随時通知される。
}

Listenerを用意して…

memeLib?.startDataReport(memeRealTimeListener)
startDataReportでリアルタイムモードになります。

 

リアルタイムモードで取得できるデータ

詳細はsdkdocに記述されています。
https://jins-meme.github.io/sdkdoc/android/data-and-event.html

視線やまばたきなどの情報が取れるようです。

 

 

この記事を書いた人

tatsuya_jinmon

tatsuya_jinmon

関連記事

おすすめの記事