| nav | 例示 |
|---|---|
| group | SESAME SDK |
| title | Android版 |
| order | 2 |
- Sesameアプリ on
https://play.google.com/store/apps/details?id=co.candyhouse.sesame2
- Sesameアプリ on
https://drive.google.com/file/d/15aRQl6aWBVwJSE4l3ZL-eMisPoe-f2lW/
implementation project(':sesame-sdk') <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT " />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> override fun onCreate()
{
super.onCreate()
CHBleManager(this)
}CHBleManagerの初期化により、端末のBluetoothが正常に動作しているか、端末からの権限が得られているか、Bluetoothが起動しているかを判断することができます。すべてが正常であれば、Bluetoothのスキャンが開始されます。 Bluetooth Service Uuid:0000FD81-0000-1000-8000-00805f9b34fb
bluetoothAdapter.bluetoothLeScanner.startScan(
mutableListOf(
ScanFilter.Builder()
.setServiceUuid(
ParcelUuid(UUID.fromString('0000FD81-0000-1000-8000-00805f9b34fb')),
)
.build(),
),
ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build(),
bleScanner,
);bleScannerでスキャンしたデバイスをCHDeviceMapに格納します。
private var mDeviceList = ArrayList<CHDevices>()
CHBleManager.delegate = object : CHBleManagerDelegate {
override fun didDiscoverUnRegisteredCHDevices(devices: List<CHDevices>) {
mDeviceList.clear()
mDeviceList.addAll(devices.filter { it.rssi != null }
.filter { it.rssi!! > -65 }///登録リストは近距離だけを表示
)
mDeviceList.sortBy { it.getDistance() }
mDeviceList.firstOrNull()?.connect { }
leaderboard_list.post((leaderboard_list.adapter as GenericAdapter<*>)::notifyDataSetChanged)
}
}
} device.connect { }
doRegisterDevice(device)
device.delegate = object : CHDeviceStatusDelegate {
override fun onBleDeviceStatusChanged(device: CHDevices, status: CHDeviceStatus, shadowStatus: CHDeviceStatus?) {
if (status == CHDeviceStatus.ReadyToRegister) {
doRegisterDevice(device)
}
}
}
fun doRegisterDevice(device: CHDevices){
device.register {
it.onSuccess { // 登録成功
}
it.onFailure { // 登録失敗
}
}
} (device as? CHWifiModule2)?.let {
// CHWifiModule2
}
(device as? CHSesame2)?.let {
// CHSesame2
}
(device as? CHSesame5)?.let {
// CHSesame5
}
(device as? CHSesameTouchPro)?.let {
// CHSesameTouchPro
}ペアリング済みのデバイスが取得できれば、APPを通じて施錠と開錠を実現できます。
public func lock(historytag: Data?, result: @escaping (CHResult<CHEmpty>)) {
if deviceShadowStatus != nil,
deviceStatus.loginStatus == .unlogined {
CHIoTManager.shared.sendCommandToWM2(.lock, self) { _ in
result(.success(CHResultStateNetworks(input: CHEmpty())))
}
return
}
if (self.checkBle(result)) { return }
let hisTag = Data.createOS2Histag(historytag ?? self.sesame2KeyData?.historyTag)
sendCommand(.init(.lock,hisTag)) { responsePayload in
if responsePayload.cmdResultCode == .success {
result(.success(CHResultStateBLE(input: CHEmpty())))
} else {
result(.failure(self.errorFromResultCode(responsePayload.cmdResultCode)))
}
}
} override fun unlock(historytag: ByteArray?, result: CHResult<CHEmpty>) {
if (deviceStatus.value == CHDeviceLoginStatus.UnLogin && isConnectedByWM2) {
CHAccountManager.cmdSesame(SesameItemCode.unlock, this, sesame2KeyData!!.hisTagC(historytag), result)
} else {
if (checkBle(result)) return
// L.d("hcia", "[ss5][unlock] historyTag:" + sesame2KeyData!!.createHistagV2(historyTag).toHexString())
sendCommand(SesameOS3Payload(SesameItemCode.unlock.value, sesame2KeyData!!.createHistagV2(historytag)), DeviceSegmentType.cipher) { res ->
if (res.cmdResultCode == SesameResultCode.success.value) {
result.invoke(Result.success(CHResultState.CHResultStateBLE(CHEmpty())))
} else {
result.invoke(Result.failure(NSError(res.cmdResultCode.toString(), "CBCentralManager", res.cmdResultCode.toInt())))
}
}
}
}各指令の対話詳細は BlueToothプロトコル 説明書を参照。
- 詳細を見る:BlueTooth プロトコル
以下は、Androidプロジェクトの構造例で、ソースコードとリソースファイルを整理します。
libs/:フォルダは、通常、第三者ライブラリ(libraries)のバイナリファイル(.jar、.aarなど)を格納するために用いられます。java/:Javaコードを格納します。機能モジュールごとにサブパッケージを分けます。例えば、activities/はアクティビティクラスを格納し、adapters/はアダプタクラスを格納します。res/:リソースファイルを格納します。これには、レイアウトファイル、文字列、アイコンなどが含まれます。リソースの種類によりディレクトリを分割し、layout/にはレイアウトファイルを、drawable/には画像リソースを、values/には文字列とスタイルリソースを格納します。build.gradle:アプリケーションレベルのGradle設定ファイル。依存関係、プラグイン、ビルド設定を設定します。proguard-rules.pro:ProGuard設定ファイル。コードの難読化や最適化を行います。これはオプションで、リリース版で使用します。
- 登録ログイン:Amazon Web Services(Mobile)
- 権限フレームワーク:Easypermissions
- ローカルデータベース永続化:Room
- クラウドデータホスティング:Amazon Web Services (IOT)
- 画面ナビゲーション:Navigation
- 画面データ管理:ViewModel
- ファームウェアアップグレードライブラリ:Dfu
- マップコンポーネント:Maps for Google
- ローカルストレージ:Preference
- リアクティブフレームワーク:Rxjava
- QRスキャン:依存 libs/qrcodecore-release.aar、Zxing
- メッセージ送信:Firebase-messaging
- プルダウンリフレッシュ:Swiperefreshlayout
- Recyclerviewヘッダー固定:StickyHeaders
- EditText自動調整:AutoResizeEditText
- スライドショー:LoopView
- スライダーライブラリ:Indicatorseekbar
SesameApp: Applicationプロセススタート
MainActivity: 主App画面
ScanQRcodeFG: 二次元コードスキャン
ScanNewDeviceFG: 新規デバイス追加
WM2SettingFG: WIFIモジュールの設定画面
SSM2SetAngleFG: SS4、SS2 角度設定画面
SSM5SettingFG: SS5、SS5PRO の設定画面
SSM2SettingFG: SS4、SS2 の設定画面
SesameBotSettingFG: SesameBot1 の設定画面
SesameBikeSettingFG: BiKeLock1、BiKeLock2 の設定画面
SesameKeyboardSettingFG: Sesame5 の設定画面
SesameOpenSensorNoBLESettingFG: SSMOpenSensor の設定画面
SesameTouchProSettingFG: SSMTouchPro、SSMTouch、BLEConnector の設定画面
SesameKeyboardCards: NFCカード設定画面
SSMTouchProFingerprint: 指紋設定画面
SesameKeyboardPassCode: 数字パスワード設定画面
SSMTouchProSelectLockerListFG: SSMTouchProデバイス共有画面
GuestKeyListFG: ビジターリスト画面
SSM2NoHandLockFG: 全自動ロック画面
MeFG: ホーム->マイページ画面
MyQrCodeFG: ホーム->マイページ画面->マイQRコード画面
LoginMailFG: ホーム->マイページ画面->登録画面
LoginVerifiCodeFG: ホーム->マイページ画面->登録画面->二次元コードの確認画面
FriendListFG: ホーム->連絡先画面
FriendDetailFG: ホーム->連絡先画面->友達の詳細画面
FriendSelectLockerListFG: ホーム->連絡先画面->友達の詳細画面->共有デバイス画面
DeviceListFG: ホーム->セサミリスト画面
MainRoomFG: ホーム->セサミリスト画面->SS4、SS2 デバイス詳細の履歴レコード
MainRoomSS5FG: ホーム->セサミリスト画面->SS5、SS5PRO デバイス詳細の履歴レコード
AddMemberFG: ホーム->セサミリスト画面->メンバー追加画面
KeyQrCodeFG: ホーム->セサミリスト画面->セサミ二次元コードQR共有画面
WM2ScanSSIDListFG: ホーム->セサミリスト画面->WIFI詳細->WIFIスキャンリスト画面
WM2SelectLockerListFG: ホーム->セサミリスト画面->WIFI詳細->セサミデバイス選択画面
- [Android BLE] (https://developer.android.com/guide/topics/connectivity/bluetooth-le?hl=ja)
- [Android NFC] (https://developer.android.com/guide/topics/connectivity/nfc?hl=ja)
- [Android Jetpack] (https://developer.android.com/jetpack?hl=ja)

