1. IPC Device bizBundle
1.1. Features
TuyaSmart Android IPC biz Bundle (referred to as: TuyaCameraPanelSDK ) is a series of panel SDKs related to camera functions developed based on Tuya Smart Camera SDK. It mainly includes the following functions:
-Preview panel, playback panel, cloud storage panel, message center panel, album panel, settings panel.
1.2. Integrate
1.2.1. Preparation
TuyaCameraPanelSDK is based on TuyaHomeSdk 3.17.6 version
Before integrating TuyaCameraPanelSDK, you need to do the following:
- Integration of TuyaHomeSdk is completed, refer to Tuya Smart Home SDK Documents (including applying for Tuya App ID and App Secret, security picture configuration related environment)
- Camera equipment completes network distribution
1.2.2. Integrated SDK
Build your project in Android Studio
Configure build.gradle in the root directory
Add the addresses of dependencies to be integrated in the build.gradle file in the root directory.
allprojects { repositories { //***** required start ****// maven { url 'https://jitpack.io' } //***** required end ****// google() jcenter() mavenCentral() } } buildscript { repositories { maven { url "https://jitpack.io" } mavenCentral() google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.5.0' classpath 'com.antfortune.freeline:gradle:0.8.6' classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.6" classpath 'org.apache.httpcomponents:httpclient:4.4.1' classpath 'com.tuya.android.module:tymodule-config:0.4.0' } }
Configure build.gradle in the module directory
In the module's build.gradle file, add the dependencies and some configurations in the integration preparation.
apply plugin: 'com.android.application' android { //... defaultConfig { //... multiDexEnabled true ndk { abiFilters "armeabi-v7a", "arm64-v8a" } } //***** start ****// compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } packagingOptions { pickFirst 'lib/*/libc++_shared.so' pickFirst 'lib/*/libgnustl_shared.so' } lintOptions { abortOnError false disable 'InvalidPackage' } //***** end ****// } dependencies { //***** start ****// implementation 'com.tuya.smart:tuyasmart-camera-panel-sdk:3.17.6-open.2' //RN implementation 'com.tuya.smart:panel-sdk:0.6.5' //homesdk implementation 'com.tuya.smart:tuyasmart:3.17.6' implementation 'com.tuya.smart:tuyasmart-imagepipeline-okhttp3:0.0.1' implementation 'com.tuya.smart:tuyasmart-webcontainer:3.12.6r125-h1' implementation 'com.tuya.smart:tuyasmart-appshell:3.10.0' implementation 'com.tuya.smart:tuyasmart-rpc:3.12.0r123' implementation 'com.tuya.smart:tuyasmart-video:3.12.6r125' implementation 'com.tuya.android.module:tymodule-annotation:0.0.7.2' implementation 'com.tuya.smart:tuyasmart-wkvideoplayer:1.0.0' //***** end ****// //third implementation 'com.weigan:loopView:0.1.1' implementation 'com.facebook.infer.annotation:infer-annotation:0.11.2' implementation 'com.facebook.soloader:soloader:0.8.0' implementation 'com.facebook.fresco:fresco:1.3.0' implementation 'com.facebook.fresco:animated-gif:1.3.0' implementation "com.facebook.fresco:imagepipeline-okhttp3:1.3.0" implementation 'com.squareup.okhttp3:okhttp-urlconnection:3.12.3' implementation 'javax.inject:javax.inject:1' implementation 'com.alibaba:fastjson:1.1.67.android' implementation 'com.tuya.smart:react-native:0.51.1.11' implementation 'com.airbnb.android:lottie:2.7.0' implementation 'org.apache.commons:commons-compress:1.9' implementation 'com.kyleduo.switchbutton:library:1.4.2' implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3' implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' implementation 'io.reactivex.rxjava2:rxjava:2.1.7' implementation 'com.hannesdorfmann:adapterdelegates3:3.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:multidex:1.0.3' implementation "com.android.support:appcompat-v7:28.0.0" implementation "com.android.support:cardview-v7:28.0.0" implementation "com.android.support:recyclerview-v7:28.0.0" implementation "com.android.support:support-annotations:28.0.0" implementation "com.android.support:support-compat:28.0.0" implementation "com.android.support:support-fragment:28.0.0" implementation "com.android.support:design:28.0.0" implementation "com.android.support:support-v4:28.0.0" //***** end ****// //... }
Configure AndroidManifest.xml
Configure appkey and appSecret in AndroidManifest.xml file, configure corresponding permissions, etc.
<!-- sdcard --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- net --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:required="false" /> <uses-permission android:name="android.permission.WAKE_LOCK" android:required="false" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" android:required="false" /> <uses-permission android:name="android.permission.VIBRATE" /> <application > <meta-data android:name="TUYA_SMART_APPKEY" android:value="Appkey" /> <meta-data android:name="TUYA_SMART_SECRET" android:value="AppSecret" /> <!-- ... --> </application>
Configure theme
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- default configuration start --> <item name="app_bg_color">@color/app_bg_color</item> <item name="list_line_color">@color/list_line_color</item> <item name="status_bg_color">@color/status_bg_color</item> <!-- default configuration end --> </style>
Configure proguard-rules.pro
Configure in the proguard-rules.pro file
//... #fastJson -keep class com.alibaba.fastjson.**{*;} -dontwarn com.alibaba.fastjson.** #mqtt -keep class org.eclipse.paho.client.mqttv3.** { *; } -dontwarn org.eclipse.paho.client.mqttv3.** -dontwarn okio.** -dontwarn rx.** -dontwarn javax.annotation.** -keep class com.squareup.okhttp.** { *; } -keep interface com.squareup.okhttp.** { *; } -keep class okio.** { *; } -dontwarn com.squareup.okhttp.** -keep class com.tuya.**{*;} -dontwarn com.tuya.**
1.2.3. Initialize the SDK
Initialize TuyaCameraPanelSDK in Application
Example
public class TuyaSmartApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// ... Confirm that appkey and appSecret exist
TuyaWrapper.init(this);
TuyaPanelSDK.init(this, "Appkey", "AppSecret");
TuyaCameraPanelSDK.init(this);
// ...
}
}
Note: Appkey and AppSecret need to be configured in the AndroidManifest.xml file, or in the build environment, or written in the code.
1.3. Function
TuyaCameraPanelSDK is an external public interface of Tuya Smart Camera Panel SDK, which includes jump and custom implementation of multiple panels.
Please refer to the demo procedure to configure a successful camera and perform operations related to the camera panel.
1.3.1. Set HomeId
Before jumping to the camera panel, you need to set the home Id where the camera device is located. Enter the corresponding panel page through the home Id and device Id
Declaration
Set the homeId where the camera is currently located
TuyaCameraPanelSDK.setCurrentHomeId(homeId);
Parameters
Parameter | Description |
---|---|
homeId | the homeId where the device is located, which can be obtained through the TuyaSmartHomeSDK - Home Management interface |
Example
TuyaCameraPanelSDK.setCurrentHomeId(homeId);
1.3.2. Native Preview Panel
Camera native preview panel, including real-time video preview, sharpness switch, sound switch control, screenshot, recording, intercom and other functions, motion detection, PTZ direction control, favorite point addition / deletion, cruise control, etc.
Panel Class Name
CameraPanelActivity.class
Parameters
Parameter | Description |
---|---|
extra_camera_uuid | device id |
Example
Bundle bundle = new Bundle();
bundle.putString("extra_camera_uuid", deviceId);
Intent intent = new Intent(context, CameraPanelActivity.class);
intent.putExtras(bundle);
context.startActivity(intent);
1.3.3. RN Preview Panel
Camera RN preview panel, packaged in TuyaPanelSDK, refer to Device Control
Declaration
TuyaPanelSDK.getPanelInstance().gotoPanelViewControllerWithDevice() to jump to the RN panel
gotoPanelViewControllerWithDevice(Activity activity, long homeId, String deviceId, ITuyaPanelLoadCallback loadCallback);
1.3.4. Playback Panel
The camera playback panel displays the video saved on the camera storage device, including video playback, playback date selection, video drag and play with time axis, play / pause, sound control, screenshot, recording and other functions
Panel Class Name
CameraPlaybackActivity.class
Parameters
Parameter | Description |
---|---|
extra_camera_uuid | Device id |
Example
Intent intent = new Intent(context, CameraPlaybackActivity.class);
intent.putExtra("extra_camera_uuid", deviceId);
context.startActivity(intent);
1.3.5. Cloud Storage Panel
The camera's cloud storage panel displays recorded cloud videos recorded after the cloud storage function is enabled. Including video cloud storage playback, cloud storage date selection, video drag and play with time axis, play / pause, sound control, screenshot, recording and other functions, and motion detection data list display.
Panel Class Name
CameraCloudActivity.class
Parameters
Parameter | Description |
---|---|
extra_camera_uuid | Device id |
timeRangeBean | Cloud storage of a piece of data's position from the last day ,not necessary |
Example
Intent intent = new Intent(context, CameraCloudActivity.class);
intent.putExtra("extra_camera_uuid", deviceId);
context.startActivity(intent);
1.3.6. Message-Center Panel
The camera message center panel includes all kinds of messages generated during the recording process of the camera. It is displayed by date and message type. The message category supports pictures, videos, and pure audio. It can be previewed and deleted.
Panel Class Name
IPCCameraMessageCenterActivity.class
Parameters
Parameter | Description |
---|---|
extra_camera_uuid | device id |
Example
Intent intent = new Intent(context, IPCCameraMessageCenterActivity.class);
intent.putExtra("extra_camera_uuid", deviceId);
context.startActivity(intent);
1.3.7. Album Panel
The camera album panel shows the files saved according to the device id. These files are local screenshots and recorded videos during the camera preview / playback / cloud video playback process. Can perform preview, single delete, delete all operations.
Panel Class Name
LocalPhotoOrVideoActivity.class
Parameters
Parameter | Description |
---|---|
extra_camera_uuid | Device id |
Example
Intent intent = new Intent(context, LocalPhotoOrVideoActivity.class);
intent.putExtra("extra_camera_uuid", deviceId);
context.startActivity(intent);
1.3.8. Doorbell Panel
The camera doorbell answer panel displays the doorbell message interface that is pushed over, including the basic information of the doorbell, real-time screenshot, answer, and hang up functions; it will enter the camera preview panel after the answer is successful
Panel Class Name
DoorBellCallingActivity.class
Parameters
Parameter | Description |
---|---|
extra_camera_uuid | device id,It is usually extracted from the message pushed |
Example
Bundle bundle = new Bundle();
bundle.putString("devId", deviceId);
Intent intent = new Intent(context, DoorBellCallingActivity.class);
intent.putExtras(bundle);
context.startActivity(intent);
1.3.9. Video Doorbell Panel
The camera video stream doorbell answer panel displays the real-time video stream doorbell message interface that is pushed over, including doorbell status information, answering, and hang-up functions; the doorbell answering timeliness, dwell time <25s, and real-time video call after successful answer.
Panel Class Name
DoorBellDirectCameraActivity.class
Parameters
Parameter | Description |
---|---|
extra_camera_uuid | device id,it is usually extracted from the message pushed |
doorbell_start_time | Long type, which indicates the start time of pressing the doorbell. The doorbell answering panel counts from the time of pressing, and the stay time is 25s (actually <25s) |
Example
Bundle bundle = new Bundle();
bundle.putString("extra_camera_uuid", deviceId);
bundle.putLong("doorbell_start_time", startTime);
Intent intent = new Intent(context, DoorBellDirectCameraActivity.class);
intent.putExtras(bundle);
context.startActivity(intent);
1.3.10. Set Panel
Camera settings panel, which can be configured and displayed through the background dp point(Tuya Smart Camera SDK - Equipment function point),include:
- device name and icon
- device information(owner,ip,device id, device time zone,wifi signal)
- base setting(Privacy switch, basic function settings, infrared night vision function, picture quality adjustment (brightness, contrast), working mode, etc.)
- Advanced settings (detection alarm setting, PIR switch, power management setting, bell setting, siren adjustment, video layout, pre-point setting, etc.)
- Storage settings (SD card capacity management, formatting, etc.)
- Value-added services (cloud storage purchase, etc.)
- Offline reminder
- Other (Frequently Asked Questions)
- reboot device
- Remove device
Panel Class Name
CameraSettingActivity.class
Parameters
Parameter | Description |
---|---|
extra_camera_uuid | device id |
Example
Intent intent = new Intent(context, CameraSettingActivity.class);
intent.putExtra("extra_camera_uuid", deviceId);
context.startActivity(intent);
1.3.11. PanelSDK customization
TuyaCameraPanelSDK supports user-defined configuration panel. If users implement the panel function by themselves, please refer to Tuya Smart Camera SDK
Theme customization
Themes include two types: black and white, support the settings panel and local album panel of Tuya Smart Camera
Declaration
Users can set the theme through TuyaCameraPanelSDK.setTheme () method
// themeId 1:black,2:white
TuyaCameraPanelSDK.setTheme(themeId);
Parameters
Parameter | Description |
---|---|
themeId | int: 1,black;2,white |
Example
TuyaCameraPanelSDK.setTheme(1);
Only support settings / local album panel
Playback customization
If the provided playback panel does not meet user needs, developers can implement the playback panel by themselves,refer to Tuya Smart Camera SDK - Playback
Declaration
Set PlaybackPanelListener to jump to the custom panel to implement playback
TuyaCameraPanelSDK.setCustomPlaybackPanelListener(PlaybackPanelListener playbackListener);
Parameters
Parameter | Description |
---|---|
playbackListener | PlaybackPanelListener interface, set this monitor to customize the playback panel; if not set, jump to the default Tuya camera playback panel |
Example
TuyaCameraPanelSDK.setCustomPlaybackPanelListener(new PlaybackPanelListener() {
@Override
public void onPlaybackPanelClick(String deviceId) {
L.d(TAG, "Customize Playback " + deviceId);
}
});
Cloud Storage customization
User-defined cloud storage,refer to Tuya Smart Camera SDK - CloudStorage
Declaration
Set up CloudStoragePanelListener, customize the panel to implement cloud storage video playback.
TuyaCameraPanelSDK.setCustomCloudStoragePanelListener(CloudStoragePanelListener cloudStoragePanelListener);
Parameters
Parameter | Description |
---|---|
cloudStoragePanelListener | CloudStoragePanelListener interface, set this listener to customize the cloud storage panel; if not set, skip to the default Tuya camera cloud storage panel |
Example
TuyaCameraPanelSDK.setCustomCloudStoragePanelListener(new CloudStoragePanelListener() {
@Override
public void onCloudStoragePanelClick(String deviceId) {
L.d(TAG, "Customize cloud storage " + deviceId);
}
});
Album customization
User-defined local photo album
Declaration
Set AlbumPanelListener, customize the panel to achieve the current deviceId image preview, playback, cloud storage video playback, video information display,local storage path:
- Screenshot:Environment.getExternalStorageDirectory().absolutePath + "/Camera/" + deviceId + "/";
Record:Environment.getExternalStorageDirectory().absolutePath + "/Camera/Thumbnail/" + deviceId + "/"
TuyaCameraPanelSDK.setCustomAlbumPanelListener(AlbumPanelListener albumPanelListener);
Parameters
Parameter | Description |
---|---|
albumPanelListener | AlbumPanelListener interface, set this listener to customize the album panel; if not set, skip to the default Tuya camera album panel |
Example
TuyaCameraPanelSDK.setCustomAlbumPanelListener(new AlbumPanelListener() {
@Override
public void onAlbumPanelClick(String deviceId) {
L.d(TAG, "customize album" + deviceId);
}
});
Message-Center customization
User-defined implementation of message center panel,reference Tuya Smart Camera SDK - Message Center
Declaration
Set up MessagePanelListener and customize the panel to display message center data
TuyaCameraPanelSDK.setCustomMessagePanelListener(MessagePanelListener messagePanelListener);
Parameters
Parameter | Description |
---|---|
messagePanelListener | MessagePanelListener interface, set this listener to customize the message center; if not set, skip to the default graffiti camera message center panel |
Example
TuyaCameraPanelSDK.setCustomMessagePanelListener(new MessagePanelListener() {
@Override
public void onMessagePanelClick(String deviceId) {
L.d(TAG, "Customize Message Center " + deviceId);
}
});
Setting customization
User-defined implementation setting module, refer to Tuya Smart Camera SDK - Set
Declaration
Set SettingListener to implement the custom panel setting function. The entrance is in the upper right corner of the preview panel.
TuyaCameraPanelSDK.setCustomSettingListener(SettingListener settingListener);
Parameters
Parameter | Description |
---|---|
settingListener | SettingListener interface, set this listener, you can customize the cloud storage panel; you can customize the settings panel, if not set, call the settings panel of the default Tuya camera |
Example
TuyaCameraPanelSDK.setCustomSettingListener(new SettingListener() {
@Override
public void onSettingClick() {
L.d(TAG, "Customize Set");
}
});
Setting - Device infomation customization
The developer can customize the device icon and name in the Tuya smart camera settings panel.
Declaration
Set DeviceInfoListener and customize the panel to modify device information.
TuyaCameraPanelSDK.setCustomDeviceInfoListener(DeviceInfoListener deviceInfoListener);
Parameters
Parameter | Description |
---|---|
deviceInfoListener | DeviceInfoListener interface, set this listener, can be customized to achieve panel settings-device information function |
Example
TuyaCameraPanelSDK.setCustomDeviceInfoListener(new DeviceInfoListener() {
@Override
public void onDeviceInfoClick(String deviceId) {
L.d(TAG, "Customize device information");
}
});
Setting - Feedback customization
Developers can customize feedback in Tuya Smart Camera Settings panel to implement feedback
Declaration
Set FeedbackListener to customize the panel to implement panel settings-feedback function
TuyaCameraPanelSDK.setCustomFeedbackListener(FeedbackListener feedbackListener);
Parameters
Parameter | Description |
---|---|
feedbackListener | FeedbackListener interface. Set this listener to customize feedback. If you do not set this listener, this item will not be displayed |
Example
TuyaCameraPanelSDK.setCustomFeedbackListener(new FeedbackListener() {
@Override
public void onFeedbackClick(String deviceId) {
L.d(TAG, "Customize feedback");
}
});
1.3.12. Modify Device information
Modify device name
Developers can modify camera device name
Declaration
Call renameDevice () under TuyaHomeSdk to modify the device name
TuyaHomeSdk.newDeviceInstance(deviceId).renameDevice(String deviceName, IResultCallback callback);
Parameters
Parameter | Description |
---|---|
deviceId | device id |
deviceName | device renamed name |
callback | IResultCallback interface,device rename success / failure callback |
Example
/**
* @param context
* @param deviceId
* @param deviceName
*/
public void renameDevice(final Context context, String deviceId, String deviceName) {
ITuyaDevice mDevice = TuyaHomeSdk.newDeviceInstance(deviceId);
mDevice.renameDevice(deviceName, new IResultCallback() {
@Override
public void onError(String code, String error) {
}
@Override
public void onSuccess() {
}
});
}
Modify device icon
Users can modify the camera icon by themselves.
Declaration
Call modifyDeviceImg () under TuyaHomeSdk to modify the device icon
DeviceInfoRepository deviceInfoRepository = new DeviceInfoRepositoryImpl(context);
ModifyDevInfoInteractor mModifyDevInfoInteractor = new ModifyDevInfoInteractorImpl(deviceInfoRepository);
mModifyDevInfoInteractor.modifyDeviceImg( deviceId, deviceName, imageFile, callback);
Parameters
Parameter | Description |
---|---|
deviceId | device id |
imageFile | File , Indicates the image file to be uploaded |
deviceName | device name,Available through DeviceBean in the TuyaHomeSdk |
callback | ModifyDevInfoInteractor.ModifyDeviceImgCallback interface,uploaded image file success / failure callback |
Example
/**
* modify icon
*
* @param context
* @param deviceId
* @param iconFilePath
*/
public void uploadIcon(final Context context, String deviceId, String iconFilePath) {
DeviceBean deviceBean = TuyaHomeSdk.getDataInstance().getDeviceBean(deviceId);
String panelName = "";
if (deviceBean != null) {
panelName = deviceBean.getName();
}
DeviceInfoRepository deviceInfoRepository = new DeviceInfoRepositoryImpl(context);
ModifyDevInfoInteractor mModifyDevInfoInteractor = new ModifyDevInfoInteractorImpl(deviceInfoRepository);
ProgressUtils.showLoadingViewFullPage(context);
mModifyDevInfoInteractor.modifyDeviceImg(deviceId, panelName, new File(iconFilePath),
new ModifyDevInfoInteractor.ModifyDeviceImgCallback() {
@Override
public void onModifyDeviceImgSuccess(String url) {
ProgressUtils.hideLoadingViewFullPage();
}
@Override
public void onModifyDeviceImgFailure() {
ProgressUtils.hideLoadingViewFullPage();
}
});
}
1.3.13. Tuya Message Push Assistant Protocol 43
With the APP process alive, in order to improve the timeliness and success rate of push messages, Tuya Smart Camera has opened a message push assistant protocol.
- Users implement their own access to push channels, refer to Tuya Smart Home SDK system push message
- Register for Tuya push message monitoring, get the push message from the callback, and follow up
Message body format definition example:
{
"a": "view",
"c": "action",
"cc": "someone is ringing the bell.",
"ct": "fcm You have a visitor",
"devId": "6cfaf335a8d6e752e0wrpy",
"msgId": "4da4dcf61573555995",
"p": {
"media": 13
},
"specialChannel": false,
"ts": "1573555995000",
"type": "doorbell"
}
Register and logout listening
Register after the account is successfully logged in, and log out when the account is logged out
Declaration
The Tuya push assistant protocol needs to register for monitoring after the account login is successful, and log out when the account is logged out.
Declaration
The Tuya push assistant protocol needs to register for monitoring after the account login is successful, and log out when the account is logged out.
//register
TuyaHomeSdk.getCameraInstance().registerCameraPushListener(ITuyaGetBeanCallback<CameraPushDataBean> callback)
//logout
TuyaHomeSdk.getCameraInstance().unRegisterCameraPushListener(ITuyaGetBeanCallback<CameraPushDataBean> callback);
Parameters
Parameter | Description |
---|---|
callback | ITuyaGetBeanCallback interface, monitor callback push messages, CameraPushDataBean encapsulates push messages |
CameraPushDataBean Data Model
Field | Type | Description |
---|---|---|
devId | String | device id |
timestamp | Integer | timestamp of push message |
etype | String | message type |
edata | String | message id |
Example
private ITuyaHomeCamera homeCamera;
private static ITuyaGetBeanCallback<CameraPushDataBean> mTuyaGetBeanCallback = new ITuyaGetBeanCallback<CameraPushDataBean>() {
@Override
public void onResult(CameraPushDataBean o) {
L.d(TAG, "onMqtt_43_Result on callback");
L.d(TAG, "timestamp=" + o.getTimestamp());
L.d(TAG, "devid=" + o.getDevId());
L.d(TAG, "msgid=" + o.getEdata());
L.d(TAG, "msgtype=" + o.getEtype());
}
};
/**
* Register listening after successful account login
*/
public void registerCameraPushListener() {
homeCamera = TuyaHomeSdk.getCameraInstance();
if (homeCamera != null) {
homeCamera.registerCameraPushListener(mTuyaGetBeanCallback);
}
}
/**
* Logout listening after account logout
*/
public void unRegisterCameraPushListener() {
if (homeCamera != null) {
homeCamera.unRegisterCameraPushListener(mTuyaGetBeanCallback);
}
}
Note:
- When the app process is killed, the listener is invalid. After the app logs in successfully, register for monitoring; the app logs out and cancels the monitoring
- To avoid repeated push messages (user own channel pushed, generated by Tuya assist protocol), you can filter by message id, message type, and message arrival time
1.3.14. Multi-language configuration in the panel
Download the language , choose the configuration you need and copy it to the res