目次Category
JINS MEME SDKをKotlinで使ってみました。
アプリ登録
アプリID / アプリSecretが必要なのでdevelopersサイトで登録しましょう。
https://developers.jins.com/ja/apps/
SDK導入
developersサイトからダウンロードしたjarファイルをプロジェクトに導入しましょう。
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に記述されています。視線やまばたきなどの情報が取れるようです。