From 98d750b5f61c670cc0bf1cdb8b0574c1b3c64888 Mon Sep 17 00:00:00 2001 From: limqhz Date: Sun, 21 Jun 2020 10:26:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E5=8D=93=E4=BB=A3=E7=A0=81=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 39 +- app/.gitignore | 1 + app/build.gradle | 99 +++ app/libs/FCardIO.jar | Bin 0 -> 584617 bytes app/product/debug/output.json | 1 + app/product/release/output.json | 1 + app/proguard-rules.pro | 21 + .../sportfaceid/ExampleInstrumentedTest.java | 26 + app/src/main/AndroidManifest.xml | 56 ++ .../com/ydd/sportfaceid/MainActivity.java | 593 ++++++++++++++++ .../com/ydd/sportfaceid/SDErrorDialog.java | 94 +++ .../com/ydd/sportfaceid/StartApplication.java | 38 ++ .../ydd/sportfaceid/config/GlobalConfig.java | 22 + .../ydd/sportfaceid/config/SDAppConfig.java | 124 ++++ .../ydd/sportfaceid/event/FaceidEvent.java | 30 + .../ydd/sportfaceid/event/MessageEvent.java | 26 + .../ydd/sportfaceid/main/SDBaseActivity.java | 94 +++ .../ydd/sportfaceid/net/ClientHandler.java | 111 +++ .../sportfaceid/net/ClientInitializer.java | 42 ++ .../com/ydd/sportfaceid/net/ClientThread.java | 170 +++++ .../java/com/ydd/sportfaceid/net/Cmd.java | 45 ++ .../ydd/sportfaceid/net/CustomDecoder.java | 40 ++ .../com/ydd/sportfaceid/net/DataConfig.java | 14 + .../com/ydd/sportfaceid/net/DoorHandler.java | 14 + .../ydd/sportfaceid/net/MessageDecoder.java | 48 ++ .../ydd/sportfaceid/net/MessageEncoder.java | 28 + .../sportfaceid/net/dto/AddFaceResponse.java | 142 ++++ .../com/ydd/sportfaceid/net/dto/BaseDto.java | 86 +++ .../ydd/sportfaceid/net/dto/FaceImageDto.java | 53 ++ .../net/dto/FaceRecognizeResponse.java | 639 ++++++++++++++++++ .../ydd/sportfaceid/net/dto/HeartBeat.java | 44 ++ .../ydd/sportfaceid/net/dto/MemberDto.java | 148 ++++ .../com/ydd/sportfaceid/net/dto/Message.java | 68 ++ .../receiver/BootCompletedReceiver.java | 30 + .../sportfaceid/service/ClientService.java | 66 ++ .../sportfaceid/service/MessageService.java | 181 +++++ .../sportfaceid/session/ClientTcpSession.java | 53 ++ .../setting/SDSettingActivity.java | 85 +++ .../com/ydd/sportfaceid/utils/AppLogger.java | 297 ++++++++ .../com/ydd/sportfaceid/utils/AppUtil.java | 50 ++ .../ydd/sportfaceid/utils/DeviceIdUtil.java | 106 +++ .../ydd/sportfaceid/utils/EggClickUtil.java | 39 ++ .../com/ydd/sportfaceid/utils/JsonMapper.java | 62 ++ .../utils/SharedPreferencesUtil.java | 135 ++++ .../com/ydd/sportfaceid/utils/TimeUntil.java | 48 ++ .../com/ydd/sportfaceid/utils/TimeUtil.java | 23 + .../ydd/sportfaceid/view/SDGustInfoView.java | 140 ++++ .../sportfaceid/websocket/FaceWsClient.java | 93 +++ .../websocket/FaceWsClientService.java | 63 ++ .../drawable-v24/ic_launcher_foreground.xml | 34 + app/src/main/res/drawable/bg_withe_fillet.xml | 6 + .../res/drawable/ic_launcher_background.xml | 170 +++++ .../main/res/drawable/memberwitebgview.xml | 5 + app/src/main/res/layout/activity_main.xml | 363 ++++++++++ .../main/res/layout/activity_sdsetting.xml | 111 +++ .../main/res/layout/dialog_error_layout.xml | 32 + .../main/res/layout/layout_guest_info_top.xml | 66 ++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../main/res/mipmap-hdpi/app_img_ico_back.png | Bin 0 -> 1377 bytes app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes app/src/main/res/mipmap-hdpi/ico_check.png | Bin 0 -> 686 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes app/src/main/res/mipmap-xhdpi/ico_add.png | Bin 0 -> 3140 bytes .../main/res/mipmap-xhdpi/ico_app_logo.png | Bin 0 -> 9532 bytes app/src/main/res/mipmap-xhdpi/ico_fi.png | Bin 0 -> 3218 bytes app/src/main/res/mipmap-xhdpi/ico_guest.png | Bin 0 -> 3082 bytes app/src/main/res/mipmap-xhdpi/ico_line.png | Bin 0 -> 1089 bytes app/src/main/res/mipmap-xhdpi/ico_nex.png | Bin 0 -> 1175 bytes app/src/main/res/mipmap-xhdpi/ico_phone.png | Bin 0 -> 1361 bytes app/src/main/res/mipmap-xhdpi/ico_s_line.png | Bin 0 -> 1019 bytes app/src/main/res/mipmap-xhdpi/ico_user.png | Bin 0 -> 1500 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes app/src/main/res/values/colors.xml | 16 + app/src/main/res/values/strings.xml | 11 + app/src/main/res/values/styles.xml | 18 + .../com/ydd/sportfaceid/ExampleUnitTest.java | 17 + app/store | Bin 0 -> 2193 bytes build.gradle | 25 + faceid.jks | Bin 0 -> 2210 bytes gradle.properties | 13 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54708 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 +++++ gradlew.bat | 84 +++ install_apk.sh | 13 + settings.gradle | 1 + 94 files changed, 5564 insertions(+), 37 deletions(-) create mode 100644 app/.gitignore create mode 100644 app/build.gradle create mode 100644 app/libs/FCardIO.jar create mode 100644 app/product/debug/output.json create mode 100644 app/product/release/output.json create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/ydd/sportfaceid/ExampleInstrumentedTest.java create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/ydd/sportfaceid/MainActivity.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/SDErrorDialog.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/StartApplication.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/config/GlobalConfig.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/config/SDAppConfig.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/event/FaceidEvent.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/event/MessageEvent.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/main/SDBaseActivity.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/ClientHandler.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/ClientInitializer.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/ClientThread.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/Cmd.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/CustomDecoder.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/DataConfig.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/DoorHandler.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/MessageDecoder.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/MessageEncoder.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/dto/AddFaceResponse.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/dto/BaseDto.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/dto/FaceImageDto.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/dto/FaceRecognizeResponse.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/dto/HeartBeat.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/dto/MemberDto.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/net/dto/Message.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/receiver/BootCompletedReceiver.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/service/ClientService.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/service/MessageService.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/session/ClientTcpSession.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/setting/SDSettingActivity.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/utils/AppLogger.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/utils/AppUtil.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/utils/DeviceIdUtil.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/utils/EggClickUtil.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/utils/JsonMapper.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/utils/SharedPreferencesUtil.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/utils/TimeUntil.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/utils/TimeUtil.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/view/SDGustInfoView.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/websocket/FaceWsClient.java create mode 100644 app/src/main/java/com/ydd/sportfaceid/websocket/FaceWsClientService.java create mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/bg_withe_fillet.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/memberwitebgview.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/activity_sdsetting.xml create mode 100644 app/src/main/res/layout/dialog_error_layout.xml create mode 100644 app/src/main/res/layout/layout_guest_info_top.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/app_img_ico_back.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-hdpi/ico_check.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xhdpi/ico_add.png create mode 100644 app/src/main/res/mipmap-xhdpi/ico_app_logo.png create mode 100644 app/src/main/res/mipmap-xhdpi/ico_fi.png create mode 100644 app/src/main/res/mipmap-xhdpi/ico_guest.png create mode 100644 app/src/main/res/mipmap-xhdpi/ico_line.png create mode 100644 app/src/main/res/mipmap-xhdpi/ico_nex.png create mode 100644 app/src/main/res/mipmap-xhdpi/ico_phone.png create mode 100644 app/src/main/res/mipmap-xhdpi/ico_s_line.png create mode 100644 app/src/main/res/mipmap-xhdpi/ico_user.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/test/java/com/ydd/sportfaceid/ExampleUnitTest.java create mode 100644 app/store create mode 100644 build.gradle create mode 100644 faceid.jks create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 install_apk.sh create mode 100644 settings.gradle diff --git a/README.md b/README.md index af9dfe9..02ae71d 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,2 @@ -# venue_android - -#### 介绍 -Android - -#### 软件架构 -软件架构说明 - - -#### 安装教程 - -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - - -#### 码云特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 -5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +# SmartVenue_Android_App +This is a repo for hosting android application of smartvenue project. diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..fb2d5a4 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,99 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId "com.ydd.sportfaceid" + minSdkVersion 19 + targetSdkVersion 28 + versionCode 4 + versionName "1.3" + flavorDimensions "versionCode" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + + android { + lintOptions { + abortOnError false + } + compileOptions { + sourceCompatibility 1.8 + targetCompatibility 1.8 + } + } + + + signingConfigs { + release { + keyAlias 'faceid' + keyPassword '123456' + storeFile file('../faceid.jks') + storePassword '123456' + } + } + + buildTypes { + release { + minifyEnabled false + signingConfig signingConfigs.release + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + productFlavors { + + product { + /** + * 服务器连接 + */ + buildConfigField("String", "SERVER_IP", "\"120.27.209.4\"") + buildConfigField("String", "SERVER_PORT", "\"56791\"") +// buildConfigField("String", "SERVER_IP", "\"192.168.1.200\"") +// buildConfigField("String", "SERVER_PORT", "\"56794\"") + /** + * face++连接地址 + */ + buildConfigField("String", "FACEID_WS_URL", "\"ws://192.168.1.111:9000/video?url=\"") + + /** + * 门禁连接地址 + */ + buildConfigField("String", "DOOR_SERVER_IP", "\"192.168.1.150\"") + buildConfigField("String", "DOOR_SERVER_PORT", "\"8000\"") + + buildConfigField("String", "DOOR_SN", "\"MC-5824T28085603\"") + buildConfigField("String", "DOOR_PWD", "\"FFFFFFFF\"") + } + } +} + +repositories { + flatDir { + dirs 'libs' + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.google.code.gson:gson:2.8.4' + implementation 'com.squareup.okhttp3:okhttp:3.3.1' + implementation 'io.netty:netty-all:4.1.17.Final' + implementation 'org.greenrobot:eventbus:3.1.1' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + implementation 'com.jakewharton:butterknife:8.8.1' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' + implementation 'io.reactivex:rxjava:1.2.4' + implementation 'io.reactivex:rxandroid:1.2.1' + implementation 'de.hdodenhof:circleimageview:2.2.0' + implementation('com.github.bumptech.glide:glide:4.8.0') { + exclude group: "com.android.support" + } + implementation 'de.mrmaffen:libvlc-android:2.1.12@aar' + implementation "org.java-websocket:Java-WebSocket:1.4.0" + compile 'com.tencent.bugly:crashreport:latest.release' + +} diff --git a/app/libs/FCardIO.jar b/app/libs/FCardIO.jar new file mode 100644 index 0000000000000000000000000000000000000000..d62d2f85c341694ea8bb802bf3edf15ac87019ff GIT binary patch literal 584617 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 documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.ydd.sportfaceid", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..2580683 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/ydd/sportfaceid/MainActivity.java b/app/src/main/java/com/ydd/sportfaceid/MainActivity.java new file mode 100644 index 0000000..2bbfd35 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/MainActivity.java @@ -0,0 +1,593 @@ +package com.ydd.sportfaceid; + +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.net.Uri; +import android.os.CountDownTimer; +import android.os.Handler; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.SurfaceView; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.tencent.bugly.Bugly; +import com.tencent.bugly.crashreport.CrashReport; +import com.ydd.sportfaceid.config.SDAppConfig; +import com.ydd.sportfaceid.event.FaceidEvent; +import com.ydd.sportfaceid.event.MessageEvent; +import com.ydd.sportfaceid.main.SDBaseActivity; +import com.ydd.sportfaceid.net.ClientThread; +import com.ydd.sportfaceid.net.dto.MemberDto; +import com.ydd.sportfaceid.service.ClientService; +import com.ydd.sportfaceid.setting.SDSettingActivity; +import com.ydd.sportfaceid.utils.EggClickUtil; +import com.ydd.sportfaceid.websocket.FaceWsClient; +import com.ydd.sportfaceid.websocket.FaceWsClientService; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; +import org.videolan.libvlc.IVLCVout; +import org.videolan.libvlc.LibVLC; +import org.videolan.libvlc.Media; +import org.videolan.libvlc.MediaPlayer; + +import java.util.ArrayList; + +import butterknife.BindView; +import butterknife.OnClick; +import de.hdodenhof.circleimageview.CircleImageView; + +public class MainActivity extends SDBaseActivity implements IVLCVout.OnNewVideoLayoutListener { + + private final String TAG = "MainActivity"; + + public final int welcome_show = 10; + + public final int user_info_ok = 11; + + public final int user_info_fail = 12; + + public final int user_info_out_ok = 13; + + public final int user_info_recahrge = 14; + + @BindView(R.id.welcome_layout) + LinearLayout welcome_layout; + + @BindView(R.id.welcome_label) + TextView welcome_label; + + @BindView(R.id.topInfoTextView) + TextView topInfoTextView; + + @BindView(R.id.user_avator) + CircleImageView avator_imageview; + + @BindView(R.id.user_name_label) + TextView user_name_label; + + @BindView(R.id.user_phone_label) + TextView user_phone_label; + + @BindView(R.id.user_amount_label) + TextView user_amount_label; + + @BindView(R.id.faceid_video_view) + SurfaceView faceid_video_view; + + @BindView(R.id.sb_string_label) + TextView sb_string_label; + + @BindView(R.id.count_down_label) + TextView count_down_label; + + + @BindView(R.id.userInfoLayout) + LinearLayout userInfoLayout; + + @BindView(R.id.package_name_label) + TextView package_name_label; + + @BindView(R.id.user_place_label) + TextView user_place_label; + + @BindView(R.id.memberInfoLineView) + LinearLayout memberInfoLineView; + + @BindView(R.id.memberInfopackLayout) + LinearLayout memberInfopackLayout; + + @BindView(R.id.unit_price_layout) + LinearLayout unit_price_layout; + + @BindView(R.id.unit_price_label) + TextView unit_price_label; + + @BindView(R.id.unit_price_line_view) + LinearLayout unit_price_line_view; + + public int current_status; + + public CountDownTimer countDownTimer; + + public CountDownTimer firstCountDownTimer; + + public EggClickUtil eggClickUtil; + + public void setMaxCountDownTime(int maxCountDownTime) { + if (maxCountDownTime < 0) { + return; + } + this.maxCountDownTime = maxCountDownTime; + count_down_label.setVisibility(View.VISIBLE); + String downString = String.format("请注意门禁将于 %ds 后关闭", this.maxCountDownTime); + count_down_label.setText(downString); + } + + public static final int maxTime = 15; + public int maxCountDownTime = 15; + + private static final int SURFACE_BEST_FIT = 0; + private static final int SURFACE_FIT_SCREEN = 1; + private static final int SURFACE_FILL = 2; + private static final int SURFACE_16_9 = 3; + private static final int SURFACE_4_3 = 4; + private static final int SURFACE_ORIGINAL = 5; + private static int CURRENT_SIZE = SURFACE_4_3; + + + private final Handler mHandler = new Handler(); + private LibVLC mLibVLC = null; + private MediaPlayer mMediaPlayer = null; + private int mVideoHeight = 0; + private int mVideoWidth = 0; + private int mVideoVisibleHeight = 0; + private int mVideoVisibleWidth = 0; + private int mVideoSarNum = 0; + private int mVideoSarDen = 0; + + private View.OnLayoutChangeListener mOnLayoutChangeListener = null; + + private SDErrorDialog errorDialog; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + //不做什么事情,只是计算屏幕的高宽 + initScreen(); + //注册消息bus + EventBus.getDefault().register(this); + + //初始化视频播放 + final ArrayList args = new ArrayList<>(); +// args.add("--aout=opensles"); +// args.add("--audio-time-stretch"); + args.add("-vvv"); + mLibVLC = new LibVLC(this, args); + mMediaPlayer = new MediaPlayer(mLibVLC); + + configView(); + + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + + //启动Service + Intent socketService = new Intent(this, ClientService.class); + startService(socketService); + } + + @Override + protected void onResume() { + super.onResume(); + StartApplication.executor.execute(new Runnable() { + @Override + public void run() { + startPlay(); + } + }); + + } + + public void startPlay() { + final IVLCVout vlcVout = mMediaPlayer.getVLCVout(); + vlcVout.setVideoView(faceid_video_view); + vlcVout.attachViews(this); + + String media_url = SDAppConfig.getInstance().getCurrentCameraUrl(); + Media media = new Media(mLibVLC, Uri.parse(media_url)); + + mMediaPlayer.setEventListener(new MediaPlayer.EventListener() { + @Override + public void onEvent(MediaPlayer.Event event) { +// Log.d("MediaPlayer", "onEvent: " + String.valueOf(event.type)); + if (event.type == MediaPlayer.Event.EndReached) { +// Log.d("MediaPlayer", "onEvent: MediaPlayer.Event.EndReached"); + mMediaPlayer.setMedia(media); + mMediaPlayer.play(); + } + } + }); + mMediaPlayer.setMedia(media); + media.release(); + mMediaPlayer.play(); + + if (mOnLayoutChangeListener == null) { + mOnLayoutChangeListener = new View.OnLayoutChangeListener() { + private final Runnable mRunnable = new Runnable() { + @Override + public void run() { + updateVideoSurfaces(); + } + }; + + @Override + public void onLayoutChange(View v, int left, int top, int right, + int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { + if (left != oldLeft || top != oldTop || right != oldRight || bottom != oldBottom) { + mHandler.removeCallbacks(mRunnable); + mHandler.post(mRunnable); + } + } + }; + } + } + + private void initScreen() { + WindowManager manager = getWindowManager(); + DisplayMetrics outMetrics = new DisplayMetrics(); + manager.getDefaultDisplay().getMetrics(outMetrics); + int mScreenW = outMetrics.widthPixels; + int mScreenH = outMetrics.heightPixels; + + Log.d("sander", mScreenW + "==== " + mScreenH); + } + + public void setCurrentStatus(int current_status) { + this.current_status = current_status; + this.sb_string_label.setVisibility(View.GONE); + this.unit_price_layout.setVisibility(View.GONE); + this.unit_price_line_view.setVisibility(View.GONE); + if (this.current_status == welcome_show) { + this.count_down_label.setVisibility(View.GONE); + this.welcome_layout.setVisibility(View.VISIBLE); + this.welcome_label.setVisibility(View.GONE); + this.topInfoTextView.setText(getResources().getString(R.string.top_line_info1)); + } else { + this.welcome_layout.setVisibility(View.GONE); + this.welcome_label.setVisibility(View.VISIBLE); + } + if (this.current_status == user_info_fail){ + this.sb_string_label.setVisibility(View.VISIBLE); + } + + if (this.current_status == user_info_ok || this.current_status == user_info_fail || this.current_status == user_info_out_ok || this.current_status == user_info_recahrge) { + this.userInfoLayout.setVisibility(View.VISIBLE); + } else { + this.userInfoLayout.setVisibility(View.GONE); + } + } + + public void configView() { +// String avator = "http://img5.duitang.com/uploads/item/201409/26/20140926190238_sdZHL.thumb.700_0.jpeg"; +// Glide.with(this).load(avator).into(this.avator_imageview); // 暂时没有网络 + this.setCurrentStatus(welcome_show); + + + eggClickUtil = new EggClickUtil(new EggClickUtil.onEggClickListener() { + @Override + public void onClickAction() { + Intent intent = new Intent(MainActivity.this, SDSettingActivity.class); + startActivity(intent); + } + }); + } + + /** + * 加载人脸识别信息 + */ + @Subscribe(threadMode = ThreadMode.MAIN) + public void loadFaceidInfo(FaceidEvent faceidEvent) { + if (faceidEvent.isDebug){ + // 这里检测到 debug模式下,显示toast + showToast(faceidEvent.msg); + return; + } + + MemberDto memberDto = faceidEvent.getMember(); + if (memberDto != null){ + // 这个是会员进入现场 + if (errorDialog != null){ + if (errorDialog.isShow){ + errorDialog.dismiss(); + } + } + CrashReport.postCatchedException(new Throwable("接受到命令 " + memberDto.getCode())); + + + // 监听到头像 + Glide.with(this).load(memberDto.getAvatar()).into(this.avator_imageview); + String message = memberDto.getMessage(); + user_name_label.setText(memberDto.getName()); + user_phone_label.setText(memberDto.getMobile()); + if (memberDto.getAmount()!= null){ + user_amount_label.setText(memberDto.getAmount().toString()); + } + if (memberDto.getPlacePrice() != null){ + unit_price_label.setText(memberDto.getPlacePrice().toString()); + } +// welcome_label.setText(String.format("欢迎%s进场", memberDto.getName())); + welcome_label.setText(message); + if (TextUtils.isEmpty(memberDto.getCardName())) { + memberInfoLineView.setVisibility(View.GONE); + memberInfopackLayout.setVisibility(View.GONE); // 场地的信息 + } else { + memberInfoLineView.setVisibility(View.VISIBLE); + memberInfopackLayout.setVisibility(View.VISIBLE); + this.user_place_label.setText(memberDto.getCardName()); + } + + if (memberDto.getCode() == 2){ + // 出场成功 + startCountDownTime(user_info_out_ok); + }else if (memberDto.getCode() == 1){ + // 入场成功 + if (memberDto.isFirst()){ + // 每天的第一次 + firstEnterHome(); + }else{ + startCountDownTime(user_info_ok); + } + + }else if (memberDto.getCode() == 0 ){ + // 入场失败 + startCountDownTime(user_info_fail); + }else if (memberDto.getCode() == -1){ + // 余额不足 + startCountDownTime(user_info_recahrge); + } + }else { + // 这个是非会员进入现场 + this.showStrangerDialog(); + } + + } + + @Override + protected void onStop() { + super.onStop(); + + mMediaPlayer.stop(); + + mMediaPlayer.getVLCVout().detachViews(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (EventBus.getDefault().isRegistered(this)) { + EventBus.getDefault().unregister(this); + } + } + + /** + * 更新视频窗口 + */ + private void updateVideoSurfaces() { + int sw = getWindow().getDecorView().getWidth(); + int sh = getWindow().getDecorView().getHeight(); + + // sanity check + if (sw * sh == 0) { + Log.e(TAG, "Invalid surface size"); + return; + } + + + Log.d("sander", "size : " + sw + " : " + sh); + + // 目前不清楚这里布局的条件,这个慢慢调出来的 + mMediaPlayer.getVLCVout().setWindowSize(1400, 800); + + ViewGroup.LayoutParams lp = faceid_video_view.getLayoutParams(); + if (true) { + /* Case of OpenGL vouts: handles the placement of the video using MediaPlayer API */ + lp.width = sw; + lp.height = sh; + faceid_video_view.setLayoutParams(lp); + mMediaPlayer.setAspectRatio(null); + mMediaPlayer.setScale(0); + return; + } + + if (lp.width == lp.height && lp.width == ViewGroup.LayoutParams.MATCH_PARENT) { + /* We handle the placement of the video using Android View LayoutParams */ + mMediaPlayer.setAspectRatio(null); + mMediaPlayer.setScale(0); + } + + double dw = sw, dh = sh; + final boolean isPortrait = getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT; + + if (sw > sh && isPortrait || sw < sh && !isPortrait) { + dw = sh; + dh = sw; + } + + // compute the aspect ratio + double ar, vw; + if (mVideoSarDen == mVideoSarNum) { + /* No indication about the density, assuming 1:1 */ + vw = mVideoVisibleWidth; + ar = (double) mVideoVisibleWidth / (double) mVideoVisibleHeight; + } else { + /* Use the specified aspect ratio */ + vw = mVideoVisibleWidth * (double) mVideoSarNum / mVideoSarDen; + ar = vw / mVideoVisibleHeight; + } + + // compute the display aspect ratio + double dar = dw / dh; + + switch (CURRENT_SIZE) { + case SURFACE_BEST_FIT: + if (dar < ar) + dh = dw / ar; + else + dw = dh * ar; + break; + case SURFACE_FIT_SCREEN: + if (dar >= ar) + dh = dw / ar; /* horizontal */ + else + dw = dh * ar; /* vertical */ + break; + case SURFACE_FILL: + break; + case SURFACE_16_9: + ar = 16.0 / 9.0; + if (dar < ar) + dh = dw / ar; + else + dw = dh * ar; + break; + case SURFACE_4_3: + ar = 4.0 / 3.0; + if (dar < ar) + dh = dw / ar; + else + dw = dh * ar; + break; + case SURFACE_ORIGINAL: + dh = mVideoVisibleHeight; + dw = vw; + break; + } + + // set display size + lp.width = (int) Math.ceil(dw * mVideoWidth / mVideoVisibleWidth); + lp.height = (int) Math.ceil(dh * mVideoHeight / mVideoVisibleHeight); + faceid_video_view.setLayoutParams(lp); + faceid_video_view.invalidate(); + } + + @Override + public void onNewVideoLayout(IVLCVout vlcVout, int width, int height, int visibleWidth, int visibleHeight, int sarNum, int sarDen) { + mVideoWidth = width; + mVideoHeight = height; + mVideoVisibleWidth = visibleWidth; + mVideoVisibleHeight = visibleHeight; + mVideoSarNum = sarNum; + mVideoSarDen = sarDen; + updateVideoSurfaces(); + } + + public void firstEnterHome(){ + if (this.firstCountDownTimer != null){ + this.firstCountDownTimer.cancel(); + this.firstCountDownTimer = null; + } + topInfoTextView.setText("人脸认证通过"); + // 欢迎页面 + this.welcome_layout.setVisibility(View.GONE); + // 顶部的 文字 + this.welcome_label.setVisibility(View.VISIBLE); + // 用户信息 layout + this.userInfoLayout.setVisibility(View.VISIBLE); + // 用户信息中的 价格layout + this.unit_price_layout.setVisibility(View.VISIBLE); + this.unit_price_line_view.setVisibility(View.VISIBLE); + this.firstCountDownTimer = new CountDownTimer(3 * 1000, 1 * 1000) { + @Override + public void onTick(long l) { + + } + + @Override + public void onFinish() { + firstCountDownTimer.cancel(); + firstCountDownTimer = null; + startCountDownTime(user_info_ok); + } + }; + + this.firstCountDownTimer.start(); + } + + public void startCountDownTime(final int current_status) { + + if (this.countDownTimer != null) { + stopCountDownTime(); + + } + if (this.firstCountDownTimer != null){ + firstCountDownTimer.cancel(); + firstCountDownTimer = null; + } + topInfoTextView.setVisibility(View.VISIBLE); + count_down_label.setVisibility(View.GONE); + if (current_status == user_info_ok) { + this.setMaxCountDownTime(maxTime); + topInfoTextView.setVisibility(View.GONE); + } else if (current_status == user_info_recahrge){ + topInfoTextView.setText("当前余额不足,请立即充值!"); + } else if (current_status == user_info_out_ok){ + topInfoTextView.setText("欢迎下次光临"); + }else if (current_status == user_info_fail){ + topInfoTextView.setText("入场失败"); + } + + this.setCurrentStatus(current_status); + + this.countDownTimer = new CountDownTimer(maxTime * 1000, 1 * 1000) { + @Override + public void onTick(long l) { + if (current_status == user_info_ok) { + topInfoTextView.setVisibility(View.GONE); + setMaxCountDownTime(maxCountDownTime - 1); + } else if (current_status == user_info_recahrge){ + topInfoTextView.setText("当前余额不足,请立即充值!"); + }else { + + } + } + + @Override + public void onFinish() { + setCurrentStatus(welcome_show); + stopCountDownTime(); + } + }; + + this.countDownTimer.start(); + } + + public void stopCountDownTime() { + this.countDownTimer.cancel(); + this.countDownTimer = null; + } + + public void showStrangerDialog(){ + if (errorDialog == null){ + errorDialog = new SDErrorDialog(this); + } + errorDialog.showDialog(); + } + + + @OnClick({R.id.gust_info_view}) void onClick(View view){ + if (view.getId() == R.id.gust_info_view){ + eggClickUtil.checkoutHideFunction(); + } + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/SDErrorDialog.java b/app/src/main/java/com/ydd/sportfaceid/SDErrorDialog.java new file mode 100644 index 0000000..116ef46 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/SDErrorDialog.java @@ -0,0 +1,94 @@ +package com.ydd.sportfaceid; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.os.CountDownTimer; +import android.support.annotation.NonNull; +import android.view.View; + +import butterknife.OnClick; + +public class SDErrorDialog extends Dialog { + + private Context mContent; + + public boolean isShow; + + private CountDownTimer countDownTimer; + public SDErrorDialog(Context context) { + super(context,R.style.Dialog_Fullscreen); + this.mContent = context; + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.dialog_error_layout); + + } + + private void stopCountDown(){ + if (this.countDownTimer != null){ + this.countDownTimer.cancel(); + this.countDownTimer = null; + } + } + private void startCountDown(){ + if (this.countDownTimer != null){ + this.countDownTimer.cancel(); + this.countDownTimer = null; + } + + this.countDownTimer = new CountDownTimer(5000, 1000) { + @Override + public void onTick(long l) { + + } + + @Override + public void onFinish() { + dismiss(); + } + }; + this.countDownTimer.start(); + } + + @Override + public void show() { + super.show(); + this.isShow = true; + this.startCountDown(); + } + + @Override + public void dismiss() { + super.dismiss(); + this.isShow = false; + } + + public void showDialog(){ + if (this.isShow){ + this.startCountDown(); + }else { + this.show(); + } + } +// public void dismissDialog(){ +// try{ +// if (this.isShow){ +// this.dismiss(); +// } +// }catch (Exception ex){ +// ex.printStackTrace(); +// } +// +// } + + + @OnClick({R.id.dialog_view}) void onClick(View view){ + this.dismiss(); + + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/StartApplication.java b/app/src/main/java/com/ydd/sportfaceid/StartApplication.java new file mode 100644 index 0000000..2024ec2 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/StartApplication.java @@ -0,0 +1,38 @@ +package com.ydd.sportfaceid; + +import android.app.Application; + +import com.tencent.bugly.Bugly; +import com.ydd.sportfaceid.config.SDAppConfig; + +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + + +/** + * StartApplication.java + * + * @author peakren + * @date 2018/6/27 5:02 PM + */ + +public class StartApplication extends Application { + + static private StartApplication sInstance; + + static public StartApplication getAppContext() { + return sInstance; + } + + public static Executor executor = Executors.newCachedThreadPool(); + + @Override + public void onCreate() { + super.onCreate(); + sInstance = this; + SDAppConfig.getInstance().init(this); + Bugly.init(getApplicationContext(), "264ca5c997", false); + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/config/GlobalConfig.java b/app/src/main/java/com/ydd/sportfaceid/config/GlobalConfig.java new file mode 100644 index 0000000..fe8e954 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/config/GlobalConfig.java @@ -0,0 +1,22 @@ +package com.ydd.sportfaceid.config; + + +/** + * 全局配置常量 + * + * @author peakren + * @date 05/12/2017 10:29 PM + */ + +public class GlobalConfig { + + public static boolean isConnected = false; + + + /** + * face++的websocket连接状态 + */ + public static boolean FACE_WS_CONNECTED = false; + + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/config/SDAppConfig.java b/app/src/main/java/com/ydd/sportfaceid/config/SDAppConfig.java new file mode 100644 index 0000000..1cbda21 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/config/SDAppConfig.java @@ -0,0 +1,124 @@ +package com.ydd.sportfaceid.config; + +import android.content.Context; +import android.content.SharedPreferences; +import android.text.TextUtils; +import android.util.Log; + +import org.w3c.dom.Text; + +public class SDAppConfig { + + public final static String TAG = "sanderConfig"; + + public static SDAppConfig config = null; + + public static String Key_sace_cache = "save_cache"; + + public static String camera_rstp_first = "rtsp://192.168.1.161/user=admin&password=&channel=1&stream=0.sdp?"; + public static String camera_rstp_sconde = "rtsp://192.168.1.160:8554/0/0/0"; + + + public String camera_local_rstp_first; + public final static String key_camera_local_rstp_first = "key_camera_local_rstp_first"; + + public String camera_local_rstp_last; + public final static String key_camera_local_rstp_last = "key_camera_local_rstp_last"; + + + private Context mContext; + + private SharedPreferences sp; + private SharedPreferences.Editor sp_editor; + + public int getCurrent_selected_camera() { + if (this.current_selected_camera >= 0 ){ + this.current_selected_camera = sp.getInt(key_current_selectd_camera,-1); + } + return current_selected_camera; + } + + public void setCurrent_selected_camera(int current_selected_camera) { + this.current_selected_camera = current_selected_camera; + sp_editor.putInt(key_current_selectd_camera, current_selected_camera); + sp_editor.commit(); + } + + private final static String key_current_selectd_camera = "key_current_selectd_camera"; + private int current_selected_camera = -1; + public static SDAppConfig getInstance(){ + synchronized (SDAppConfig.class){ + if (config == null){ + config = new SDAppConfig(); + } + } + return config; + } + + public void init(Context context){ + this.mContext = context; + synchronized (SDAppConfig.class){ + if (sp == null){ + sp = this.mContext.getSharedPreferences(Key_sace_cache, Context.MODE_PRIVATE); + sp_editor = sp.edit(); + this.configData(); + }else { + Log.e(TAG, "这里只能被执行一次"); + } + } + } + public void configData(){ + this.camera_local_rstp_first = sp.getString(key_camera_local_rstp_first, ""); + if (TextUtils.isEmpty(this.camera_local_rstp_first)){ + this.setCamera_local_rstp_first(camera_rstp_first); + } + this.camera_local_rstp_last = sp.getString(key_camera_local_rstp_last, ""); + if (TextUtils.isEmpty(this.camera_local_rstp_last)){ + this.setCamera_local_rstp_last(camera_rstp_sconde); + } + this.current_selected_camera = sp.getInt(key_current_selectd_camera,-1); + if (this.current_selected_camera == -1){ + this.setCurrent_selected_camera(0); + } + + } + + + + public String getCamera_local_rstp_first() { + if (TextUtils.isEmpty(camera_local_rstp_first)){ + camera_local_rstp_first = sp.getString(key_camera_local_rstp_first, ""); + } + return camera_local_rstp_first; + } + + public void setCamera_local_rstp_first(String camera_local_rstp_first) { + this.camera_local_rstp_first = camera_local_rstp_first; + sp_editor.putString(key_camera_local_rstp_first, camera_local_rstp_first); + sp_editor.commit(); + } + + public String getCamera_local_rstp_last() { + if (TextUtils.isEmpty(camera_local_rstp_last)){ + camera_local_rstp_last = sp.getString(key_camera_local_rstp_last, ""); + } + return camera_local_rstp_last; + } + + public void setCamera_local_rstp_last(String camera_local_rstp_last) { + this.camera_local_rstp_last = camera_local_rstp_last; + sp_editor.putString(key_camera_local_rstp_last, camera_local_rstp_last); + sp_editor.commit(); + } + + public String getCurrentCameraUrl(){ + if (this.current_selected_camera == 1){ + return this.getCamera_local_rstp_last(); + } + return this.getCamera_local_rstp_first(); + } + + + + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/event/FaceidEvent.java b/app/src/main/java/com/ydd/sportfaceid/event/FaceidEvent.java new file mode 100644 index 0000000..fc2b810 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/event/FaceidEvent.java @@ -0,0 +1,30 @@ +package com.ydd.sportfaceid.event; + +import com.ydd.sportfaceid.net.dto.MemberDto; + +/** + * 消息事件 + * + * @author peakren + * @date 08/12/2017 11:16 PM + */ +public class FaceidEvent { + + private MemberDto member; + + public FaceidEvent(MemberDto member) { + this.member = member; + } + + public MemberDto getMember() { + return member; + } + + public void setMember(MemberDto member) { + this.member = member; + } + + public boolean isDebug; + + public String msg; +} diff --git a/app/src/main/java/com/ydd/sportfaceid/event/MessageEvent.java b/app/src/main/java/com/ydd/sportfaceid/event/MessageEvent.java new file mode 100644 index 0000000..393e0e2 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/event/MessageEvent.java @@ -0,0 +1,26 @@ +package com.ydd.sportfaceid.event; + +import com.ydd.sportfaceid.net.dto.MemberDto; + +/** + * 消息事件 + * + * @author peakren + * @date 08/12/2017 11:16 PM + */ +public class MessageEvent { + + private String message; + + public MessageEvent(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/main/SDBaseActivity.java b/app/src/main/java/com/ydd/sportfaceid/main/SDBaseActivity.java new file mode 100644 index 0000000..a6d0046 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/main/SDBaseActivity.java @@ -0,0 +1,94 @@ +package com.ydd.sportfaceid.main; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.drawable.ColorDrawable; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + + +import butterknife.ButterKnife; + +/** + * Created by sandershan on 2018/11/27. + */ + +public class SDBaseActivity extends Activity { + private Toast mToast; + + @Override + public void setContentView(View view) { + super.setContentView(view); + ButterKnife.bind(this); + + } + + @Override + public void setContentView(int layoutResID) { + super.setContentView(layoutResID); + ButterKnife.bind(this); + + } + + @Override + public void setContentView(View view, ViewGroup.LayoutParams params) { + super.setContentView(view, params); + ButterKnife.bind(this); +// ScreenAdapterTools.getInstance().loadView(getWindow().getDecorView()); + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + + } + + /** + * toast提示 + * + * @param msg 待提示内容 + */ + public void showToast(String msg) { + if (TextUtils.isEmpty(msg)) { + return; + } + if (mToast == null) { + mToast = Toast.makeText(this, msg, Toast.LENGTH_SHORT); + } else { + mToast.setText(msg); + } + mToast.show(); + } + /** + * 检测当的网络(WLAN、3G/2G)状态 + * @return true 表示网络可用 + */ + public boolean isNetworkAvailable() { + Context context = this; + ConnectivityManager connectivity = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivity != null) { + NetworkInfo info = connectivity.getActiveNetworkInfo(); + if (info != null && info.isConnected()) + { + // 当前网络是连接的 + if (info.getState() == NetworkInfo.State.CONNECTED) + { + // 当前所连接的网络可用 + return true; + } + } + } + showToast("当前网络不好,请检查网络"); + return false; + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/ClientHandler.java b/app/src/main/java/com/ydd/sportfaceid/net/ClientHandler.java new file mode 100644 index 0000000..6a2a672 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/ClientHandler.java @@ -0,0 +1,111 @@ +package com.ydd.sportfaceid.net; + +import android.app.Activity; +import android.util.Log; +import android.widget.Toast; + +import com.ydd.sportfaceid.StartApplication; +import com.ydd.sportfaceid.config.GlobalConfig; +import com.ydd.sportfaceid.session.ClientTcpSession; +import com.ydd.sportfaceid.service.MessageService; +import com.ydd.sportfaceid.net.dto.HeartBeat; +import com.ydd.sportfaceid.net.dto.Message; +import com.ydd.sportfaceid.utils.AppUtil; +import com.ydd.sportfaceid.utils.DeviceIdUtil; +import com.ydd.sportfaceid.utils.JsonMapper; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; + +/** + * 通讯服务器请求处理 + * + * @author peakren + * @date 05/12/2017 10:27 PM + */ +@ChannelHandler.Sharable +public class ClientHandler extends ChannelInboundHandlerAdapter { + + private final static String TAG = "ClientHandler"; + + private boolean hasRead = false; + + private Activity mContext; + + public ClientHandler(Activity context) { + mContext = context; + } + + @Override + public void channelRegistered(ChannelHandlerContext ctx) throws Exception { + super.channelRegistered(ctx); + ClientTcpSession.getInstance().setContext(ctx); + } + + @Override + public void channelActive(ChannelHandlerContext ctx) throws Exception { + super.channelActive(ctx); + //服务器连上以后立即模拟心跳返回 + ctx.writeAndFlush(getHbMessage()); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + Log.e(TAG, "----close----"); + GlobalConfig.isConnected =false; + ClientThread.getInstance().clearFuture(); + ClientThread.getInstance().restart(); + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + super.channelRead(ctx, msg); + Log.i(TAG, "----read data: " + msg.toString() + "----"); + Message message = JsonMapper.fromJson(msg.toString(), Message.class); + MessageService.getInstance().execute(message); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + super.exceptionCaught(ctx, cause); + Log.e(TAG, "----tcp exception----"); + GlobalConfig.isConnected = false; + ctx.close(); + } + + /** + * 获取心跳返回消息 + * + * @return + */ + private Message getHbMessage() { + HeartBeat hb = new HeartBeat(); + hb.setVersionCode(AppUtil.getVersionCode(StartApplication.getAppContext())); + Message message = new Message(); + message.setCmdId(Cmd.HB.id); +// message.setDeviceId(DeviceIdUtil.generateDeviceId(mContext)); + return message; + } + + /** + * 心跳处理 + * + * @param ctx + * @param evt + * @throws Exception + */ + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + if (IdleStateEvent.class.isAssignableFrom(evt.getClass())) { + IdleStateEvent event = (IdleStateEvent) evt; + if (event.state() == IdleState.ALL_IDLE) { + ctx.writeAndFlush(getHbMessage()); + } + } + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/ClientInitializer.java b/app/src/main/java/com/ydd/sportfaceid/net/ClientInitializer.java new file mode 100644 index 0000000..3c6621e --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/ClientInitializer.java @@ -0,0 +1,42 @@ +package com.ydd.sportfaceid.net; + +import android.content.Context; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.socket.SocketChannel; +import io.netty.handler.codec.LengthFieldBasedFrameDecoder; +import io.netty.handler.timeout.IdleStateHandler; + + +public class ClientInitializer extends ChannelInitializer { + + private Context mContext; + + private final static int TIME_HEART_BEAT = 20; + + public ClientThread.ReConnectHandler reConnectHandler; + public ClientHandler dmClientHandler; + + public ClientInitializer(ClientThread.ReConnectHandler handler) { + reConnectHandler = handler; + } + + public ClientInitializer(ClientThread.ReConnectHandler handler, ClientHandler dmClientHandler) { + reConnectHandler = handler; + this.dmClientHandler = dmClientHandler; + } + + + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + pipeline.addLast("reconnect", reConnectHandler); + pipeline.addLast("idleStateHandler", new IdleStateHandler(TIME_HEART_BEAT, TIME_HEART_BEAT, TIME_HEART_BEAT)); + pipeline.addLast(new MessageEncoder()); + pipeline.addFirst(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 4, 4, 0, 0)); + pipeline.addLast(new MessageDecoder()); + pipeline.addLast(dmClientHandler); + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/ClientThread.java b/app/src/main/java/com/ydd/sportfaceid/net/ClientThread.java new file mode 100644 index 0000000..e4ea970 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/ClientThread.java @@ -0,0 +1,170 @@ +package com.ydd.sportfaceid.net; + +import android.app.Activity; +import android.os.Handler; +import android.util.Log; + +import com.ydd.sportfaceid.BuildConfig; +import com.ydd.sportfaceid.config.GlobalConfig; +import com.ydd.sportfaceid.event.MessageEvent; +import com.ydd.sportfaceid.utils.SharedPreferencesUtil; + +import org.greenrobot.eventbus.EventBus; + +import java.net.InetSocketAddress; +import java.util.concurrent.TimeUnit; + +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioSocketChannel; + + +/** + * 客户端通讯 + * + * @author peakren + * @date 07/12/2017 10:12 PM + */ +public class ClientThread { + + private final static String TAG = "sander"; + + private static ClientThread instance; + + private volatile EventLoopGroup workerGroup; + private volatile Bootstrap bootstrap; + private volatile boolean closed = false; + private String remoteHost; + private int remotePort; + + private Activity mContext; + + private ChannelFuture future; + + + public static ClientThread getInstance() { + if (instance == null) { + synchronized (ClientThread.class) { + if (instance == null) { + instance = new ClientThread(BuildConfig.SERVER_IP, Integer.valueOf(BuildConfig.SERVER_PORT)); + } + } + } + return instance; + } + + public ClientThread(String remoteHost, int remotePort) { + this.remoteHost = remoteHost; + this.remotePort = remotePort; + } + + public void run() { + + closed = false; + workerGroup = new NioEventLoopGroup(); + bootstrap = new Bootstrap(); + bootstrap.group(workerGroup); + bootstrap.channel(NioSocketChannel.class); + bootstrap.option(ChannelOption.TCP_NODELAY, true); + bootstrap.option(ChannelOption.SO_KEEPALIVE, true); + + ReConnectHandler reConnectHandler = new ReConnectHandler(); + ClientHandler dmClientHandler = new ClientHandler(mContext); + ClientInitializer channelInitializer = new ClientInitializer(reConnectHandler, dmClientHandler); + + bootstrap.handler(channelInitializer); + doConnect(); + } + + public void clearFuture(){ + future = null; + } + + public void doConnect() { + Log.d("sander","现在开始链接了"); + if (closed) { + return; + } + remoteHost = SharedPreferencesUtil.getServerIp(); + remotePort = SharedPreferencesUtil.getServerPort(); + +// if (future != null){ +// return; +// } +// future = null; + if (GlobalConfig.isConnected){ + return; + } + + Log.d("sander", "连接 = " + remoteHost + " " + remotePort); + future = bootstrap.connect(new InetSocketAddress(remoteHost, remotePort)); + future.addListener(new ChannelFutureListener() { + public void operationComplete(ChannelFuture f) throws Exception { + f.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + if (!f.isSuccess()) { + if (GlobalConfig.isConnected) { + GlobalConfig.isConnected = false; + } + doConnect(); + EventBus.getDefault().post(new MessageEvent("等待连接")); + Log.e(TAG, "连接失败!"); + } else { + EventBus.getDefault().post(new MessageEvent("已连接")); + Log.i(TAG, "连接成功!"); + GlobalConfig.isConnected = true; + } + } + }, 2, TimeUnit.SECONDS); + + + } + }); + + } + + + public void setContext(Activity context) { + mContext = context; + } + + + public void close() { + closed = true; + workerGroup.shutdownGracefully(); + } + + public void restart() { + this.remoteHost = SharedPreferencesUtil.getServerIp(); + this.remotePort = SharedPreferencesUtil.getServerPort(); + close(); + run(); + } + + @ChannelHandler.Sharable + public class ReConnectHandler extends ChannelInboundHandlerAdapter { + + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + super.channelInactive(ctx); + System.out.println("inactive"); + ctx.channel().eventLoop().schedule(new Runnable() { + @Override + public void run() { + doConnect(); + } + }, 1, TimeUnit.SECONDS); + } + } + + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/Cmd.java b/app/src/main/java/com/ydd/sportfaceid/net/Cmd.java new file mode 100644 index 0000000..626118a --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/Cmd.java @@ -0,0 +1,45 @@ +package com.ydd.sportfaceid.net; + +/** + * 消息协议指令定义 + * + * @Author peakren + * @Date 08/12/2017 11:51 AM + */ +public enum Cmd { + + + HB("hb", "心跳"), + + FACEID("faceid", "人脸识别"), + + FACEID_RESPONSE("faceid_response_upload", "识别结果"), + + RECEV_FACE_IMAGE("recev_face_image", "接收人脸照片"), + + RECEV_FACE_IMAGE_R("recev_face_image_r", "返回上传图片结果"), + + OPEN_DOOR("open_door", "开门禁"); + + + public String id; + + public String text; + + Cmd(String id, String text) { + this.id = id; + this.text = text; + + } + + public static Cmd getCmd(String id) { + for (Cmd cmd : Cmd.values()) { + if (cmd.id.equalsIgnoreCase(id)) { + return cmd; + } + } + return Cmd.HB; + } + +} + diff --git a/app/src/main/java/com/ydd/sportfaceid/net/CustomDecoder.java b/app/src/main/java/com/ydd/sportfaceid/net/CustomDecoder.java new file mode 100644 index 0000000..032f8cd --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/CustomDecoder.java @@ -0,0 +1,40 @@ +package com.ydd.sportfaceid.net; + +import java.nio.ByteOrder; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.LengthFieldBasedFrameDecoder; + + +/** + * 自定义解码器,解决粘包和分包问题 + * + * @author peakren + * @date 07/12/2017 10:03 PM + */ +public class CustomDecoder extends LengthFieldBasedFrameDecoder { + + public CustomDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength) { + super(maxFrameLength, lengthFieldOffset, lengthFieldLength); + } + + public CustomDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip) { + super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip); + } + + public CustomDecoder(int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip, boolean failFast) { + super(maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip, failFast); + } + + public CustomDecoder(ByteOrder byteOrder, int maxFrameLength, int lengthFieldOffset, int lengthFieldLength, int lengthAdjustment, int initialBytesToStrip, boolean failFast) { + super(byteOrder, maxFrameLength, lengthFieldOffset, lengthFieldLength, lengthAdjustment, initialBytesToStrip, failFast); + } + + + @Override + protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception { + return super.decode(ctx, in); + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/DataConfig.java b/app/src/main/java/com/ydd/sportfaceid/net/DataConfig.java new file mode 100644 index 0000000..1b3c248 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/DataConfig.java @@ -0,0 +1,14 @@ +package com.ydd.sportfaceid.net; + +/** + * Created by hehelt on 16/2/26. + */ +public class DataConfig { + + public static final int MAGIC_WORD = 0x9DDD; + public static final int MAGIC_WORD_INDEX = 0; + public static final int LENGTH_INDEX = 4; + public static final int DATA_INDEX = 8; + + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/DoorHandler.java b/app/src/main/java/com/ydd/sportfaceid/net/DoorHandler.java new file mode 100644 index 0000000..a4468e0 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/DoorHandler.java @@ -0,0 +1,14 @@ +package com.ydd.sportfaceid.net; + + +/** + * 门禁处理 + * DoorHandler.java + * + * @author peakren + * @date 2019/4/17 12:44 PM + */ +public class DoorHandler { + + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/MessageDecoder.java b/app/src/main/java/com/ydd/sportfaceid/net/MessageDecoder.java new file mode 100644 index 0000000..f314018 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/MessageDecoder.java @@ -0,0 +1,48 @@ +package com.ydd.sportfaceid.net; + +import java.io.UnsupportedEncodingException; +import java.util.List; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.ByteToMessageDecoder; + +/** + * Created by hehelt on 16/2/26. + *

+ * 解码器 + */ +public class MessageDecoder extends ByteToMessageDecoder { + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + if (in.capacity() >= DataConfig.LENGTH_INDEX) { + int magicWord = in.readInt(); + if (magicWord == DataConfig.MAGIC_WORD) { + int length = in.readInt(); + byte[] msg = new byte[length]; + in.readBytes(msg); + String message = new String(msg, "utf-8"); + out.add(message); + } + } + } + + /** + * 解析从服务器接受的消息 + * + * @param buf + * @return + */ + private String getMessage(ByteBuf buf) { + + byte[] con = new byte[buf.readableBytes()]; + buf.readBytes(con); + try { + return new String(con, "utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/MessageEncoder.java b/app/src/main/java/com/ydd/sportfaceid/net/MessageEncoder.java new file mode 100644 index 0000000..e6957fe --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/MessageEncoder.java @@ -0,0 +1,28 @@ +package com.ydd.sportfaceid.net; + +import android.util.Log; + +import com.ydd.sportfaceid.net.dto.Message; +import com.ydd.sportfaceid.utils.JsonMapper; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.MessageToByteEncoder; + +/** + * 自定义编码器, 1个字节固定头+4个字节长度+内容 + */ +public class MessageEncoder extends MessageToByteEncoder { + + private String charset = "utf-8"; + private final static String TAG = "MessageEncoder"; + + @Override + protected void encode(ChannelHandlerContext ctx, Message message, ByteBuf out) throws Exception { + out.writeInt(DataConfig.MAGIC_WORD); + String msg = JsonMapper.toJson(message); + Log.i(TAG, "send data:" + msg); + out.writeInt(msg.getBytes(charset).length); + out.writeBytes(msg.getBytes(charset)); + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/dto/AddFaceResponse.java b/app/src/main/java/com/ydd/sportfaceid/net/dto/AddFaceResponse.java new file mode 100644 index 0000000..7360ec9 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/dto/AddFaceResponse.java @@ -0,0 +1,142 @@ +package com.ydd.sportfaceid.net.dto; + +import com.google.gson.annotations.Expose; + +public class AddFaceResponse { + + /** + * code : 0 + * data : {"company_id":1,"id":4,"origin_url":"/static/upload/origin/2018-08-09/v2_1ea4b7847d1ea56b773aec99441af52dcbf9ca7d.jpg","quality":0.992649,"subject_id":null,"url":"/static/upload/photo/2018-08-09/v2_fa9dcfd045ff5232aa446f5645cbb031eef7ac74.jpg","version":7} + * page : {} + */ + + @Expose + private int code; + + @Expose + private DataBean data; + + @Expose + private PageBean page; + + @Expose + private String desc; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public PageBean getPage() { + return page; + } + + public void setPage(PageBean page) { + this.page = page; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public static class DataBean { + /** + * company_id : 1 + * id : 4 + * origin_url : /static/upload/origin/2018-08-09/v2_1ea4b7847d1ea56b773aec99441af52dcbf9ca7d.jpg + * quality : 0.992649 + * subject_id : null + * url : /static/upload/photo/2018-08-09/v2_fa9dcfd045ff5232aa446f5645cbb031eef7ac74.jpg + * version : 7 + */ + + @Expose + private int company_id; + @Expose + private int id; + @Expose + private String origin_url; + @Expose + private double quality; + @Expose + private Object subject_id; + @Expose + private String url; + @Expose + private int version; + + public int getCompany_id() { + return company_id; + } + + public void setCompany_id(int company_id) { + this.company_id = company_id; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getOrigin_url() { + return origin_url; + } + + public void setOrigin_url(String origin_url) { + this.origin_url = origin_url; + } + + public double getQuality() { + return quality; + } + + public void setQuality(double quality) { + this.quality = quality; + } + + public Object getSubject_id() { + return subject_id; + } + + public void setSubject_id(Object subject_id) { + this.subject_id = subject_id; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + } + + public static class PageBean { + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/dto/BaseDto.java b/app/src/main/java/com/ydd/sportfaceid/net/dto/BaseDto.java new file mode 100644 index 0000000..41819c7 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/dto/BaseDto.java @@ -0,0 +1,86 @@ +package com.ydd.sportfaceid.net.dto; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +/** + * Created by peakren on 19/01/2018. + */ + +public class BaseDto implements Serializable { + + private static final long serialVersionUID = 3139438146199448677L; + + @Expose + private String cmdId; //指令 + + @Expose + private String deviceId; //设备ID + + /** + * 客户端IP + */ + @Expose + private String clientIp; + + /** + * 状态码 0正常 1错误 + */ + @Expose + private int errorCode = 0; + + /** + * 错误返回信息 + */ + @Expose + private String errorMsg; + + + public String getCmdId() { + return cmdId; + } + + public void setCmdId(String cmdId) { + this.cmdId = cmdId; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + /** + * 客户端IP,获取的内网IP + * + * @return + */ + public String getClientIp() { + return clientIp; + } + + public void setClientIp(String clientIp) { + this.clientIp = clientIp; + } + + public int getErrorCode() { + return errorCode; + } + + public void setErrorCode(int errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMsg() { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } + + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/dto/FaceImageDto.java b/app/src/main/java/com/ydd/sportfaceid/net/dto/FaceImageDto.java new file mode 100644 index 0000000..c109214 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/dto/FaceImageDto.java @@ -0,0 +1,53 @@ +package com.ydd.sportfaceid.net.dto; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; +import java.math.BigDecimal; + + +/** + * 会员基本信息 + * MemberDto.java + * + * @author peakren + * @date 2018/12/20 8:39 PM + */ +public class FaceImageDto implements Serializable { + + + @Expose + private Integer faceId; + + @Expose + private Integer memberId; + + + @Expose + private String faceImage; + + + public Integer getFaceId() { + return faceId; + } + + public void setFaceId(Integer faceId) { + this.faceId = faceId; + } + + public Integer getMemberId() { + return memberId; + } + + public void setMemberId(Integer memberId) { + this.memberId = memberId; + } + + public String getFaceImage() { + return faceImage; + } + + public void setFaceImage(String faceImage) { + this.faceImage = faceImage; + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/dto/FaceRecognizeResponse.java b/app/src/main/java/com/ydd/sportfaceid/net/dto/FaceRecognizeResponse.java new file mode 100644 index 0000000..6d186ad --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/dto/FaceRecognizeResponse.java @@ -0,0 +1,639 @@ +package com.ydd.sportfaceid.net.dto; + +import java.io.Serializable; +import java.util.List; + +public class FaceRecognizeResponse implements Serializable { + + /** + * data : {"status":"recognized","track":6,"timestamp":1533808724,"face":{"image":"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","rect":{"top":918,"right":872,"bottom":990,"left":798}},"person":{"feature_id":0,"confidence":78.397995,"tag":"{\"description\": \"\", \"remark\": \"\", \"subject_type\": 0, \"name\": \"ndy\", \"inviter_id\": null, \"start_time\": 0, \"title\": \"\", \"interviewee\": \"\", \"avatar\": \"/static/upload/photo/2018-08-09/v2_cec2cd5140b55db4051d9c69775ec6ebaea5947b.jpg\", \"origin_photo_id\": 3, \"birthday\": null, \"id\": 5, \"entry_date\": null, \"department\": \"\", \"interviewee_pinyin\": \"\", \"job_number\": \"\", \"end_time\": 0}","id":"5"},"quality":0.9968518905807287} + * screen : {"camera_address":"rtsp://192.168.1.160:8554/0/0/0","allowed_subject_ids":[],"network_switcher_status":null,"box_token":"95a0f5b6-924d-4323-9296-39d258f2b3f9","description":null,"allow_all_subjects":true,"box_heartbeat":1533806262,"network_switcher":"","camera_name":"","camera_status":0,"allow_visitor":true,"screen_token":"3c566c3f-6d7f-437a-af56-8ba4a7852745","network_switcher_token":null,"box_status":"0","network_switcher_drive":0,"type":1,"id":1,"camera_position":"测试","box_address":"192.168.1.50"} + * person : {"src":"data:image/jpeg;base64,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","remark":"","subject_type":0,"description":"","inviter_id":null,"timestamp":1533808724,"start_time":0,"title":"","interviewee":"","job_number":"","entry_date":null,"origin_photo_id":3,"birthday":null,"avatar":"/static/upload/photo/2018-08-09/v2_cec2cd5140b55db4051d9c69775ec6ebaea5947b.jpg","department":"","end_time":0,"interviewee_pinyin":"","id":5,"name":"ndy"} + * error : 允许进入 + * open_door : true + * type : recognized + */ + + private DataBean data; + private ScreenBean screen; + private PersonBeanX person; + private String error; + private boolean open_door; + private String type; + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public ScreenBean getScreen() { + return screen; + } + + public void setScreen(ScreenBean screen) { + this.screen = screen; + } + + public PersonBeanX getPerson() { + return person; + } + + public void setPerson(PersonBeanX person) { + this.person = person; + } + + public String getError() { + return error; + } + + public void setError(String error) { + this.error = error; + } + + public boolean isOpen_door() { + return open_door; + } + + public void setOpen_door(boolean open_door) { + this.open_door = open_door; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public static class DataBean { + /** + * status : recognized + * track : 6 + * timestamp : 1533808724 + * face : {"image":"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","rect":{"top":918,"right":872,"bottom":990,"left":798}} + * person : {"feature_id":0,"confidence":78.397995,"tag":"{\"description\": \"\", \"remark\": \"\", \"subject_type\": 0, \"name\": \"ndy\", \"inviter_id\": null, \"start_time\": 0, \"title\": \"\", \"interviewee\": \"\", \"avatar\": \"/static/upload/photo/2018-08-09/v2_cec2cd5140b55db4051d9c69775ec6ebaea5947b.jpg\", \"origin_photo_id\": 3, \"birthday\": null, \"id\": 5, \"entry_date\": null, \"department\": \"\", \"interviewee_pinyin\": \"\", \"job_number\": \"\", \"end_time\": 0}","id":"5"} + * quality : 0.9968518905807287 + */ + + private String status; + private int track; + private FaceBean face; + private PersonBean person; + private double quality; + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public int getTrack() { + return track; + } + + public void setTrack(int track) { + this.track = track; + } + + + public FaceBean getFace() { + return face; + } + + public void setFace(FaceBean face) { + this.face = face; + } + + public PersonBean getPerson() { + return person; + } + + public void setPerson(PersonBean person) { + this.person = person; + } + + public double getQuality() { + return quality; + } + + public void setQuality(double quality) { + this.quality = quality; + } + + public static class FaceBean { + /** + * image : /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCACPAJQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6Nx7Um33qQ9KZXhJ2IE2+9BXHenU2QtjK9ae+xSGO4QZz0rjPiN8VfCnw00K513xJqscKwA7IVYGWVsZCoCRk/Uge9Vviv8T9E+FPhi68ReIJQ3y+XbWa4825k7BckH8eg71+bXxR+JfiT4reIZNe8SXLMWXyorfd+7gjHRQvTvjPWtKdNyZSVz1vx7+15q/jzWIdJllvdA8Lvd+ZetpWz7dPCoO1RIcAAkjdjsO4yG8K8S6xoF0LCDw3ostnFbRyiaaeffLcStIx34ACoNmz5QODuOTmsF0CjYDwOAKTjua61h4lNIsrqN95Yia8mKZzt3nBp1vqN3aSi4tLiSKVWDKysQVI7g9qq5FGQa0VJCubV/4y8WanJHPqHifVbmSI5jaW7kcx+u3J4r034Z/tX/FP4Z6bfaZaX0eqpeMpjfUGaRrbb/cznOenPTqK8YpGolRVhpXPvb4Jftp2njPU7bw38QILbSrqYbUvg+2FnzwrD+En16V9KjV9H1/SLqPTdVtLvMLOphmVwSOmCDjrivx0BYdDW54U8Xa94P1iDWtC1Ge0uYWBDxtgkA5K/Q1z1KCtoDifsRHdCSKMsfmMaFvYkcipozyR614v+zj8c9O+Mfh4yXBEet2CRxX1sX3YJX5XU9SuBjkDkEV7Opw2a5ZRcSB9KD2pKB1pITHr1ooBAPNFMkoj5ulIy7RyMV89+GP2sPE3iXwh8SoNG8F+Gm8XeCdMtNds7Bbr7ZFqGnef5V5IsqSBVeBXjfbuDNuAAbpXAaf+2z8SdQ02LUZPDXgf7JdSyW6+bFcybtqgnIyTghv/AK1NRi+o0rn19I6lWVdrHBwpOATXNePfHGn/AA68G6l4z1lNtvpkDy7egdx9xAfV2IUcdSM8ZI+bk/bC8UqGP/CE/CssVwssuiXbOh7MDtwCOteD/Hn9oLx/8VLqLQtd1HS002zKyC10iOSG2dyMqzK2CWAYfQVtGFijk/in8V/E/wAWvEtz4k8RSiNXc/ZrOInyrePoFUeuByfc1w7kmpP4absZhwM11U4qxqiuyHNN8s1b+zykcrU0enXMmNkROfatOaxfs2zO8s0hXHNaL2EqSCNl5NOn0i7jgNyYH8sHBcDgGjmRPsmZYyTmlyDxVg2rcjHIqIRkHpVXTBwcdxoFSAAikIK8EUDPWla4WOw+GPxL8SfCnxZZ+K/Dtzte3kHnwMfkuIuN0bD0IGOOR1ByK/U34feLoPH/AIO0bxjpCg22sWi3S7mLBGIy0Z91OQfcGvyFBBGDzX6B/sFfEJfE3w4vvBNzdL53ha7Cxp0HkTKWUD1IZZST/tL6GuWtSurkSR9OAakSMTWwUjnMJJ/nS+Vd97yMf7sP+JqxjBxRsHrXHaxle5AILnvqMw/3UUf0oqfaaKBHkWg62/hueDX7H9nHwTBp92Bp+qamviXTLKSy02YhJ32jPmhFIfyz12cYOK+XLv4NXXgbxl4x+GI13wul5oWtLqlhJfyz/wCladdRRvEYZYkMZGHAIOMFT1xivatasvE/ik6X4nPwt8b6Ne3tlHe6dcaL4q0TTJ5bOdQ3zQhWj+dSMxSHJ4BArn/iL8VNO8WeANL+IE3ww19JPBGsReA/F6J4jW11E2GEawu5Vt0EUYeR51LBRlwVBYY289PazNeVI8sf4Y+O7nyljtvDkgRwZbm31TI8vPJ2lQTgd8Zr50166kvtavZ3kSTbKUDJnaQOBjIBx+FfUup/GvwZaaHcTWvwbtrW41SGa3tr64115GtpFdQzbWHzN1w2Pyr5NMUyO2+Tdyf85711YeE07SDlBRnit/w34duNZuhDGmAELsScAD3rJsLSfUr2LTLRWa4nO2NVXcx5xwO9fQGmeENK0ryUluLcSpBF5ieVtZCxAH3iO5z7ZNd1SXs1ZG9KHMzy288LC3fIRiEznHQVuab4SkUB5V4K8D2967zydCnHk27xOZZpYg4wd+wkNg9COK1EsbNdoMiKFyCvrxxg1xyrN7HqUqCZ5TdeDEFxDctAJESYeYueWQkZxn0Ga6y18L6TJbPayWokhupNpQnKKo9/4eg5wa6PU7jTtMtJZZ0XZHGXC78Egdf6VxGrfEyGG4ubDQoJ5LNAN21SxkJBJP8As9lz7VCqybsdP1VIwNT8CX/hrUp7q2hjv7IQlZU25YhsDIHrz2rG1PwHe26x3emFLiGQjah++M+o9Pf2rvNFu9Vv5P7RmuZW2wgR24ORk/eJJ9AAO+cc1tWUF3PcCOW2kMahcSLGSoJPA9B0zXQpyiTUwsJHg2raTc6dJsuk2ydSB0FZwxgjFe2+PfCUup2Ams7dBJG252AOSvOc4Ht+teMPGI5HQ9VbBrop1Lnm16Hs3oRqvbFfUv8AwT51mWz+Juv+HUT5NQ0hrtjnjMMiKMjuf3x/I18vou48c/Svb/2L/EN1on7QOm2lqMrq1ndafOCQPkKeZ/6FCh/Ciq1ys4ai7H6YodwBBzT6r2bE267uuasV5xgFFFFAHzrafAP4L2H2qe2/Zs+KJtXuMkX9iIyAcdVFzuJzznbnmtXTvBXwjtfDWu/DvQf2dvHGgw+O7aLTrvUz4fmuIrOQ7nt3mZWkZAkuxm2glTtLD0+d/Dnxj8Pa/wCNvDFr40+H/im9v7u6MNjrvi34r3UUWnybwN1xN5QCrGTvywHBIA4xXq51PxBe/FC5+JOg/GD4SW+pmWOKFbHx1dXVlcSwjbAZkiaEOAgAZsDcMNtHAOVZOLVjo0PB/D/g7Xbv4c3vgfUvh7Nc+JvDHiq+j1G/t7uBJ7VgiLLaujNudRJuOBkBiT15rx/xv4fvvDerGG/06SzS8UXNrHJtDeUeASAcDkHivqrxZrfhs32tfFTxFD8O/FviW41GO01e68P2UjaXDMpDFgZykvzxRfNIoIZ2b5jya8K8ZXVh4v8AC1lqaeGNB0uW4vJovtlkJA0iREkgliRy2eg6Ba6aM2wOX+D2nNqXxCtJktpbhrKCW5EcSlnIRSeAOTyRxXU+KfD3i7V/KuVnlsbyLe13BIGjkCu3O7jOeOVNR/s5WVtD8Uoo7m4dFezn8w79oCLtY5Ppwc+2a9a8a6vpthf3d/PA142q6nPa20cxZI5GQDDCQA5UAglhnnPXFViJPQ6sOkeLJ4K8b6U0sen6hcNIxd33MAUlcLudXGeSAM//AK69D0O41e60W1F9cCa4g+W5k8tRlwP9kAHk4zjnGTWRY+LtQ1hruT+xrXTJLL5Z4UYuAckYHvxyRj2ArrPD09lo1v8AaNSlZLZyIYhIVK+dtyRtHAGSMnpiuRqx61JKxzXi/wAPjxBJCdRCxQW7b4lUnJc4yCe4OOnHbrVfTtP0zTTujt4o1UnzScKGHbce+O2a6zVfE2nyRmxgEa/aG3tIUVlkAXA8vPQZI5HPHvWBeWE5QvAmVkXaysMrz3pxbibryCy1HQIpxZ299b/aiN3lJySueTkemRx71vadN5xby1fbJiRcjrgkZrn/AAV4Cl8Oy6jqM919tnmVYgUYuBxl9uQMZwAPxFdRJHNp2nyHT7NEkkXMQIICnB49RyfzqnNjaFlubW3gF88ZlR0YCP8AhkXI3A9umeteBeOvC6+FNTNvq+qaeb+7H21bKwBdLaCTOxXkIGW2kEAA4A5PavpS1tftH2TzrdAYoB8iqAu4n5gfz+teMftI+HYtN1nTNWt4FWfUrcJM5blmQjbx/ukcj0ropTRxYilKdkiz8LfglF4t0XWtW1uWWGP7Ey6QFlCRS3ZBKGVsEmMbSGVQCc8MMc+ifBfRooP2mfB11DptvYx21nLbyRxRBEeRIpMlf7xwyMT1+cZrSttV161sfCNrpsNk2mQaZbpegoAwYsFVhJjAHlgH1JI617V+z94Yj1HxRrPxakW38qa3Ok2sO0ZgbbES/oCVjKE9ww9Kqbujjr4f2dNtnvUAG/CtwKs1n2chBZmAGWOD6j1q013ap/rJ1X6muc8gmoqkdWtMkLKCPWiqSuB8n/Ez4QfEfwz+0LpPjb4NXQ0mTWHudVsLkraTC1ulQLORFcHaw2uDgqR+8x2BGbrvwn+NHijWZL7xjo2m3N42/wA6/trSwt5r9+AryR24RM7Qeg719CajpNh4/wBK0zV/Evwa0vWptKWW3srq+8QPamBm2CUKqISpbYDyDwOtUv8AhXvhnt8IdJjGNvPiiZuPr5YI6micVPc0TPCPCvwH+L3hnxWbK/8AB0Nz4L8VrHpusWQljtpIomVkNwpU4Vot3mDhtw8xcAsWHOXv7J/xH0u81jwVMlvZaLpN1MNMnupQiTW4LMZkYZVy2Dnn0HavdG+BfwzjkuJF+HWlx/amBmRtZvbhVwQcqXYc8duOT61Z1D4V+AH0vTtATwfZNpWkLmws5tTvJltGMhdvLLPwCxJPA6nrTh7mw0z5o0H4QaL8OfjPa6P408axaSNW8MXEtleWNyt3HLftLHCLUwqhdiVckAY3E4ByDjs9fgkg1/U/C2uxJcXekN9m+1lFQSqQHTCDgNtkDeoyOc8Vt/GH4aeBtJvPAXinRfC+jaNbeGNft5L2eJWE08c08ZO6UkswXaw+bjDY5yRWx8T7e61Lxjfz6icukiT20u7cGi2gHB9MggfSsMRVasejg4KW549pvgu3tAllp1qqbg3nSbArSEnjce+PftXW2fhWK48ReHL+2uAIrOFo5kbnzojkEkdAc4GeT1FXAUiJY4wOvGePp3qP4VQNqfiLxDdmS4W301oYV8xfkUldzqmeBnqTjnI71g6jkexCCiYWq+EdI1SBIJLQQxxu8sSQnBViT044+lPi06GNQAMkKqnn0rZllsyq3Ed9Dtd2J3PtK8nnB5xkYz6msa6uzHMhhePMrrHgtu43HkEZHIrVO6OuEEy/YWiQkCFQo7itQ2kLglowc+tZ9i5fYw6E9K2RtxknAx6VdrmnIiOC3VRmJRkEDH1rzP426K+sadY6pJbPK9otxEmzaQm7Z8xDKecL8vbrnNepwuA0wePay4VQvT1OfwNZni7T4NT0JoZQIoYd9zczbypWJFyQCD3G4e+SOKqPu7GNaCWph+HbXU9Y8I2V3q8sYsraC2GnWFvIn7hUQAszqMs3GCGwONx64r6I8HwRaL4RbTYLm4Q3sy30kb4VopA+fLGOiYHA9zXg/wCzzq6fF1GudJ8LyaNpuixub+3gtI3jnuSh2CJi24LwjMOgOfWvoiz0bxHqEcd4uj3Kq6qwNwwjwOoHzelbJ3Wp4eZVFy8qLa6rfJJPJDMypNK0oHpntSNqU8v+tlZvrS6d4L1m1t/sy3NnGPNZ9tzcGRxuOSBjt6Vej8HXZlYXWvQxRbf+WFpubd6fMenv+lS49jxDHe7Z5AkbOWz0ANFdHb+FdGhkDXeoanOF64kVFbHbAX+tFaQgwOHh1ee1vbtJSHXUnWck42RyqoU4z6gelStrDLMsRVQXGR8grKvdN1a/thBpf2mKUMPna3AKnrwD6jitA6Fq7yiOSJ08sYAJA5xzk+lZmqih818HPzSHJ7AVWa5J+5IfXrV3/hF72QRebPAmzOfmJz9f8KmtvCscJ/eXwGRj5EJJ/E0DscjrVjD4htLvSrxYZLa5SMMf+WgZWzkNjjAGR7+nWszUbW71DwzBfXF2tw1jB9lkAbc4+bjGBzwD3zXpK+FdPKRxNLMUVstg7OO/T2qrqvh3SW0+a1gthaRFQB5Yz93JBPvWNWmpK514aq4Ox4jcRJACqtnjr1/nXEWXh/xpeeHvFGj6DqU0FxqV7ay2mSeWjKlyzD5sH5ckdh0r0fWdOS1u40aIrAZGQkliW+Y4xjp2qpJc6doMVxcajdw2Uunp5nmeZgMrZwAeDk7SCMeg5rkR71KfMkzzm602+eXTdH1meSYLpxa7b+NpMfMc5JOSMgE+3FO8HaXNpEM1nJNLJF5hljDk4VmJLY/Gse+8aXmrTXt/pekXMEc4jSzuRbs0W1erEnkgnJ6c1PpfjbV7SeGPXNA+R7cRtLCp3F8gGQoR8oI3H5eQcYreOx2U3c9G0oLuK9gM1sxhSRj0zXL+Gdfs9dtWvrPTL2yUFoCl1HsZsfxqM8g54PeuotzErAqWIdNgHQgDPJ/T9au9jdD0jABOOtQ6lpd5r/hvW/DthLHHc6xDFp8LyfcV5WKgt14BIJ47VKkoeNWPG4Zx6U/SxcyeIdFto5JBBNq1kZgi5yqzKwz3xxzjscc5xQndnFiXZM9a+C/wytvhN4MsPDMFxDczrH5l5cRptE05+8w9RjjnnGK9BJVyDjn61Bbh5SUtoHkVeOFK4/PFW49P1RyNmnEA93kUf1rpppNHymJk5S1E+Y5PrSHPc1eGi6kAC8ltGD3DliPyFPXw28rBZNVkOT91I8E+wJGK2j7pynI+PvF1l4H8Fal4kvX4soJJ0UKGMjqBtUA8EkkcHtRXkX7a2saZpHhvRfBGnTSyXesTi4uFchm+zR5GQABgF++P4KK1jK4Hq+59+/PU5JodiW3sc59auxeHtZcQl44Iw4Jch9wU54wR14q6nhe8kAWe7RBnIKxg/L6da47GxihlA+RAPwoEjA/Wuij8J2oG2W4lfnPBxVgeGNJwC0DEjvvNFh6HJs+1txYZpqyKzfN93ow2bgR3ruItE0yJY9tlFuUHJIznmp/sdrwBbRjHHC0NXRcHZnz14s02WwSSEpJsdw8eIyHbnoAevWvLde02y1a5S91LS4bmO0wZBcxh8LkErhs4zgZ5zx9K+s/Hng5PE+mrBFarLdxOrW59CTg/UAdq+ZbrRJNQ064kyimeJD1O5TxkMBnngg//AF64Kq5Ge7hp86SPPdavTeXslhBZyQQ6ey20apg4TrkduN36VFbWKyuzts8+5jOcHPTtnrnvz610Op6RFARcif5ZpmBjU4JYBcknvxjjp1qO0toYgrFORnGeTVQlc9WnFI09NjSOM4CqNiKgA4UAYxir6zhGGDkgYzjFULeVFBIZcYyc+lLcXQjyWAXau/OeMcf4itG9C5S5di/NcqoQHuRxWr4QvP8AirtAzJjzNUtlYZx/y0BP8q5pJDK4ZxwOMCn2N0+neIdH1aSUiK01G3cgdcbxnH4A0kmcGJk1Fs+2/svkuevFWFPFK5Ev78AhZFDr7gjNNHWuqF4nytWV56igsG4Jpx/eDy2bAb5SfQGkIxXn/wAdvHUfw/8Ahb4g12KYrffY2t7JV5dp5PlXH0BY5/2a6YJSMj4p+N3jST4j/F/X/EZut9pp0p0bTgjZTyIXILDt8xyegznmiuF023khtQ80haWYmWTJOd7HnOe+aKu3KI/UYKACMDk5NKRnqaUdadgVy2HcYEpdlOwKU4HenYfMxu2jbikaWNFLuwVV6knAFcz8SfiDo/w9+H+r+PNStb69s9FWGaeCxQee8MkgjZ1yRnZncRx0zS6GkXc6dIvOlRACx3LwO/NfJXivU18OeKtRubKz3WUdzPE0EfG3L4Xbg4HPHHHNdz4j+N1/4lmOheDY9Q0PT5E2zX80itdzLjdtjUHEQIKgtknOcdK878ZpEFtWgXAii2SAEbSpOSCAOSc8mvOrzTdj18InFKRwGtaw8c86bVYxS/KjdFyAduT1/wDr1iP4glwiITGYyinAIOSxJPuCOK1dVtnZ2XJYSndx2+tYl3oU7qyx3MsLtGeVGQSOQee+MilSaR7EajaLEnik2sYXeMxPIFBJ5JGencYNWNPu7rVpIrqQY2RlFGCFCnrn35qla6BCzG4uYmkbzVYDqoTuCPTr+ddXZ2UMYYLGF6AADAA+lbNc2xUZOWjJdOMrxB5N29/m+YY+U9CKt3GmxXirHM8iLuUloz8ygHkj3xnFS28RjKxMxwvCgdAPp2q9szTimmZVo3Vj6M+CvxDbxRodnoWr6gJNWsEFsxlcGW5XJ2yerHBAJ9R6V6XtJORnaeVOPvDOMj8a+I5hdpJZJplxLFf3Fx5doYWKSCZRuUhh0+oOeK+kvBH/AAk+geGbGy13xFc6lrEyxyane3CL+/nONzbFwIwoO0AdQozzXfTjzo+axdFwmz0wJuB5GQK+N/22/Gr33irQfh5Zyq8enRjVLxcdJWyEU/Rcn6kYr6XHjyLTbWfWtYVV062jkmllRslQnPQdsd+35V+eninxFd+OfGWt+Mb+Zn/tK8klgzn5Ic4RB6AADj3NbRg46s4iig2pubq3JopHbjAOcUVooqW4H6hgZpdvvTPtVsP+W8f/AH0Kje8hxxMh/wCBCuVcr6gTHA6moXuEXLbgAtUprosflcce9VZ5WZSAe46VqowW8l94EmpOZtLlQhGLjgY4znj8ay9a0+z8QaTcaTqVrHLaXlt9mniYZVkOMj9P0rRJUwhCQfamlR2IH40mqb0ujSL5T5x8R+Db3wRqEUE1sHtCGSGYjKFQOFJ656dsZrnbyJLlh5qnKcYJwR+FfTOuWuh39pJBq1zbrAgxI0kijZ36np618veLfEPw50O/lk0Px54fvrW6n8uMxazbvsbdtLMFYk47nsK8jFUXze7qe1hsRT5bSaRmXNmjS5HQetVpLEGRDtG0HJFSy+KfCYVnHibSWVTgyfbI9p+hzVeHxX4VupVgt/E2kyyMdqpHexsxPoAGrKNKa6M9OGIoW+NfeidbRATtXAPFW4Ew2cdqbeXFrpzxxahcxWrzHEazOELn2B61saZ4d1/UozNpuiX93GMfPBbPIoz05UGulRkuhvCvhlvNfeirHw3uasCeKEBpELZIG0HBJ9K1G8H+LI4Xk/4RTVtyLnH2GUk/QBetdr4O+F9zGP7a8VWxjC7HjgZSBG2eC2QOuenY1tCKe5jicXQgrwmm/UZ8NfB8kNwnizWrdUusbrBBx5Snq3B5JAHUV6Q8jEYLfewOTU50i4hIRLWTaB/dPFE9lcog22kzeyoT/SvSpRpQ+0vvPncVifbO54b+094lOlfDh9HthLGup3Is0nilVduQC6kkhmztAwoIwDkjivl+CP7PZxRA5KqK9j+PHhr4jeM/iQ8mn/D3xLJpmixfZ7WWPS55I5nbmRlITGDgcg9RXC/8Kv8AiY2Ek+G/ikLnquj3H5fcrSpOnbSS+889HMRLcTMFiBkbcAqjjBPGSe/0orvm+G3j/RNCnv1+HXiW71KdlVbeHR7hgijvwnWipjOC6oD/2Q== + * rect : {"top":918,"right":872,"bottom":990,"left":798} + */ + + private String image; + private RectBean rect; + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public RectBean getRect() { + return rect; + } + + public void setRect(RectBean rect) { + this.rect = rect; + } + + public static class RectBean { + /** + * top : 918 + * right : 872 + * bottom : 990 + * left : 798 + */ + + private int top; + private int right; + private int bottom; + private int left; + + public int getTop() { + return top; + } + + public void setTop(int top) { + this.top = top; + } + + public int getRight() { + return right; + } + + public void setRight(int right) { + this.right = right; + } + + public int getBottom() { + return bottom; + } + + public void setBottom(int bottom) { + this.bottom = bottom; + } + + public int getLeft() { + return left; + } + + public void setLeft(int left) { + this.left = left; + } + } + } + + public static class PersonBean { + /** + * feature_id : 0 + * confidence : 78.397995 + * tag : {"description": "", "remark": "", "subject_type": 0, "name": "ndy", "inviter_id": null, "start_time": 0, "title": "", "interviewee": "", "avatar": "/static/upload/photo/2018-08-09/v2_cec2cd5140b55db4051d9c69775ec6ebaea5947b.jpg", "origin_photo_id": 3, "birthday": null, "id": 5, "entry_date": null, "department": "", "interviewee_pinyin": "", "job_number": "", "end_time": 0} + * id : 5 + */ + + private int feature_id; + private double confidence; + private String tag; + private String id; + + public int getFeature_id() { + return feature_id; + } + + public void setFeature_id(int feature_id) { + this.feature_id = feature_id; + } + + public double getConfidence() { + return confidence; + } + + public void setConfidence(double confidence) { + this.confidence = confidence; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + } + + public static class ScreenBean { + /** + * camera_address : rtsp://192.168.1.160:8554/0/0/0 + * allowed_subject_ids : [] + * network_switcher_status : null + * box_token : 95a0f5b6-924d-4323-9296-39d258f2b3f9 + * description : null + * allow_all_subjects : true + * box_heartbeat : 1533806262 + * network_switcher : + * camera_name : + * camera_status : 0 + * allow_visitor : true + * screen_token : 3c566c3f-6d7f-437a-af56-8ba4a7852745 + * network_switcher_token : null + * box_status : 0 + * network_switcher_drive : 0 + * type : 1 + * id : 1 + * camera_position : 测试 + * box_address : 192.168.1.50 + */ + + private String camera_address; + private Object network_switcher_status; + private String box_token; + private Object description; + private boolean allow_all_subjects; + private int box_heartbeat; + private String network_switcher; + private String camera_name; + private int camera_status; + private boolean allow_visitor; + private String screen_token; + private Object network_switcher_token; + private String box_status; + private int network_switcher_drive; + private int type; + private int id; + private String camera_position; + private String box_address; + private List allowed_subject_ids; + + public String getCamera_address() { + return camera_address; + } + + public void setCamera_address(String camera_address) { + this.camera_address = camera_address; + } + + public Object getNetwork_switcher_status() { + return network_switcher_status; + } + + public void setNetwork_switcher_status(Object network_switcher_status) { + this.network_switcher_status = network_switcher_status; + } + + public String getBox_token() { + return box_token; + } + + public void setBox_token(String box_token) { + this.box_token = box_token; + } + + public Object getDescription() { + return description; + } + + public void setDescription(Object description) { + this.description = description; + } + + public boolean isAllow_all_subjects() { + return allow_all_subjects; + } + + public void setAllow_all_subjects(boolean allow_all_subjects) { + this.allow_all_subjects = allow_all_subjects; + } + + public int getBox_heartbeat() { + return box_heartbeat; + } + + public void setBox_heartbeat(int box_heartbeat) { + this.box_heartbeat = box_heartbeat; + } + + public String getNetwork_switcher() { + return network_switcher; + } + + public void setNetwork_switcher(String network_switcher) { + this.network_switcher = network_switcher; + } + + public String getCamera_name() { + return camera_name; + } + + public void setCamera_name(String camera_name) { + this.camera_name = camera_name; + } + + public int getCamera_status() { + return camera_status; + } + + public void setCamera_status(int camera_status) { + this.camera_status = camera_status; + } + + public boolean isAllow_visitor() { + return allow_visitor; + } + + public void setAllow_visitor(boolean allow_visitor) { + this.allow_visitor = allow_visitor; + } + + public String getScreen_token() { + return screen_token; + } + + public void setScreen_token(String screen_token) { + this.screen_token = screen_token; + } + + public Object getNetwork_switcher_token() { + return network_switcher_token; + } + + public void setNetwork_switcher_token(Object network_switcher_token) { + this.network_switcher_token = network_switcher_token; + } + + public String getBox_status() { + return box_status; + } + + public void setBox_status(String box_status) { + this.box_status = box_status; + } + + public int getNetwork_switcher_drive() { + return network_switcher_drive; + } + + public void setNetwork_switcher_drive(int network_switcher_drive) { + this.network_switcher_drive = network_switcher_drive; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getCamera_position() { + return camera_position; + } + + public void setCamera_position(String camera_position) { + this.camera_position = camera_position; + } + + public String getBox_address() { + return box_address; + } + + public void setBox_address(String box_address) { + this.box_address = box_address; + } + + public List getAllowed_subject_ids() { + return allowed_subject_ids; + } + + public void setAllowed_subject_ids(List allowed_subject_ids) { + this.allowed_subject_ids = allowed_subject_ids; + } + } + + public static class PersonBeanX { + /** + * src : data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCACPAJQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6Nx7Um33qQ9KZXhJ2IE2+9BXHenU2QtjK9ae+xSGO4QZz0rjPiN8VfCnw00K513xJqscKwA7IVYGWVsZCoCRk/Uge9Vviv8T9E+FPhi68ReIJQ3y+XbWa4825k7BckH8eg71+bXxR+JfiT4reIZNe8SXLMWXyorfd+7gjHRQvTvjPWtKdNyZSVz1vx7+15q/jzWIdJllvdA8Lvd+ZetpWz7dPCoO1RIcAAkjdjsO4yG8K8S6xoF0LCDw3ostnFbRyiaaeffLcStIx34ACoNmz5QODuOTmsF0CjYDwOAKTjua61h4lNIsrqN95Yia8mKZzt3nBp1vqN3aSi4tLiSKVWDKysQVI7g9qq5FGQa0VJCubV/4y8WanJHPqHifVbmSI5jaW7kcx+u3J4r034Z/tX/FP4Z6bfaZaX0eqpeMpjfUGaRrbb/cznOenPTqK8YpGolRVhpXPvb4Jftp2njPU7bw38QILbSrqYbUvg+2FnzwrD+En16V9KjV9H1/SLqPTdVtLvMLOphmVwSOmCDjrivx0BYdDW54U8Xa94P1iDWtC1Ge0uYWBDxtgkA5K/Q1z1KCtoDifsRHdCSKMsfmMaFvYkcipozyR614v+zj8c9O+Mfh4yXBEet2CRxX1sX3YJX5XU9SuBjkDkEV7Opw2a5ZRcSB9KD2pKB1pITHr1ooBAPNFMkoj5ulIy7RyMV89+GP2sPE3iXwh8SoNG8F+Gm8XeCdMtNds7Bbr7ZFqGnef5V5IsqSBVeBXjfbuDNuAAbpXAaf+2z8SdQ02LUZPDXgf7JdSyW6+bFcybtqgnIyTghv/AK1NRi+o0rn19I6lWVdrHBwpOATXNePfHGn/AA68G6l4z1lNtvpkDy7egdx9xAfV2IUcdSM8ZI+bk/bC8UqGP/CE/CssVwssuiXbOh7MDtwCOteD/Hn9oLx/8VLqLQtd1HS002zKyC10iOSG2dyMqzK2CWAYfQVtGFijk/in8V/E/wAWvEtz4k8RSiNXc/ZrOInyrePoFUeuByfc1w7kmpP4absZhwM11U4qxqiuyHNN8s1b+zykcrU0enXMmNkROfatOaxfs2zO8s0hXHNaL2EqSCNl5NOn0i7jgNyYH8sHBcDgGjmRPsmZYyTmlyDxVg2rcjHIqIRkHpVXTBwcdxoFSAAikIK8EUDPWla4WOw+GPxL8SfCnxZZ+K/Dtzte3kHnwMfkuIuN0bD0IGOOR1ByK/U34feLoPH/AIO0bxjpCg22sWi3S7mLBGIy0Z91OQfcGvyFBBGDzX6B/sFfEJfE3w4vvBNzdL53ha7Cxp0HkTKWUD1IZZST/tL6GuWtSurkSR9OAakSMTWwUjnMJJ/nS+Vd97yMf7sP+JqxjBxRsHrXHaxle5AILnvqMw/3UUf0oqfaaKBHkWg62/hueDX7H9nHwTBp92Bp+qamviXTLKSy02YhJ32jPmhFIfyz12cYOK+XLv4NXXgbxl4x+GI13wul5oWtLqlhJfyz/wCladdRRvEYZYkMZGHAIOMFT1xivatasvE/ik6X4nPwt8b6Ne3tlHe6dcaL4q0TTJ5bOdQ3zQhWj+dSMxSHJ4BArn/iL8VNO8WeANL+IE3ww19JPBGsReA/F6J4jW11E2GEawu5Vt0EUYeR51LBRlwVBYY289PazNeVI8sf4Y+O7nyljtvDkgRwZbm31TI8vPJ2lQTgd8Zr50166kvtavZ3kSTbKUDJnaQOBjIBx+FfUup/GvwZaaHcTWvwbtrW41SGa3tr64115GtpFdQzbWHzN1w2Pyr5NMUyO2+Tdyf85711YeE07SDlBRnit/w34duNZuhDGmAELsScAD3rJsLSfUr2LTLRWa4nO2NVXcx5xwO9fQGmeENK0ryUluLcSpBF5ieVtZCxAH3iO5z7ZNd1SXs1ZG9KHMzy288LC3fIRiEznHQVuab4SkUB5V4K8D2967zydCnHk27xOZZpYg4wd+wkNg9COK1EsbNdoMiKFyCvrxxg1xyrN7HqUqCZ5TdeDEFxDctAJESYeYueWQkZxn0Ga6y18L6TJbPayWokhupNpQnKKo9/4eg5wa6PU7jTtMtJZZ0XZHGXC78Egdf6VxGrfEyGG4ubDQoJ5LNAN21SxkJBJP8As9lz7VCqybsdP1VIwNT8CX/hrUp7q2hjv7IQlZU25YhsDIHrz2rG1PwHe26x3emFLiGQjah++M+o9Pf2rvNFu9Vv5P7RmuZW2wgR24ORk/eJJ9AAO+cc1tWUF3PcCOW2kMahcSLGSoJPA9B0zXQpyiTUwsJHg2raTc6dJsuk2ydSB0FZwxgjFe2+PfCUup2Ams7dBJG252AOSvOc4Ht+teMPGI5HQ9VbBrop1Lnm16Hs3oRqvbFfUv8AwT51mWz+Juv+HUT5NQ0hrtjnjMMiKMjuf3x/I18vou48c/Svb/2L/EN1on7QOm2lqMrq1ndafOCQPkKeZ/6FCh/Ciq1ys4ai7H6YodwBBzT6r2bE267uuasV5xgFFFFAHzrafAP4L2H2qe2/Zs+KJtXuMkX9iIyAcdVFzuJzznbnmtXTvBXwjtfDWu/DvQf2dvHGgw+O7aLTrvUz4fmuIrOQ7nt3mZWkZAkuxm2glTtLD0+d/Dnxj8Pa/wCNvDFr40+H/im9v7u6MNjrvi34r3UUWnybwN1xN5QCrGTvywHBIA4xXq51PxBe/FC5+JOg/GD4SW+pmWOKFbHx1dXVlcSwjbAZkiaEOAgAZsDcMNtHAOVZOLVjo0PB/D/g7Xbv4c3vgfUvh7Nc+JvDHiq+j1G/t7uBJ7VgiLLaujNudRJuOBkBiT15rx/xv4fvvDerGG/06SzS8UXNrHJtDeUeASAcDkHivqrxZrfhs32tfFTxFD8O/FviW41GO01e68P2UjaXDMpDFgZykvzxRfNIoIZ2b5jya8K8ZXVh4v8AC1lqaeGNB0uW4vJovtlkJA0iREkgliRy2eg6Ba6aM2wOX+D2nNqXxCtJktpbhrKCW5EcSlnIRSeAOTyRxXU+KfD3i7V/KuVnlsbyLe13BIGjkCu3O7jOeOVNR/s5WVtD8Uoo7m4dFezn8w79oCLtY5Ppwc+2a9a8a6vpthf3d/PA142q6nPa20cxZI5GQDDCQA5UAglhnnPXFViJPQ6sOkeLJ4K8b6U0sen6hcNIxd33MAUlcLudXGeSAM//AK69D0O41e60W1F9cCa4g+W5k8tRlwP9kAHk4zjnGTWRY+LtQ1hruT+xrXTJLL5Z4UYuAckYHvxyRj2ArrPD09lo1v8AaNSlZLZyIYhIVK+dtyRtHAGSMnpiuRqx61JKxzXi/wAPjxBJCdRCxQW7b4lUnJc4yCe4OOnHbrVfTtP0zTTujt4o1UnzScKGHbce+O2a6zVfE2nyRmxgEa/aG3tIUVlkAXA8vPQZI5HPHvWBeWE5QvAmVkXaysMrz3pxbibryCy1HQIpxZ299b/aiN3lJySueTkemRx71vadN5xby1fbJiRcjrgkZrn/AAV4Cl8Oy6jqM919tnmVYgUYuBxl9uQMZwAPxFdRJHNp2nyHT7NEkkXMQIICnB49RyfzqnNjaFlubW3gF88ZlR0YCP8AhkXI3A9umeteBeOvC6+FNTNvq+qaeb+7H21bKwBdLaCTOxXkIGW2kEAA4A5PavpS1tftH2TzrdAYoB8iqAu4n5gfz+teMftI+HYtN1nTNWt4FWfUrcJM5blmQjbx/ukcj0ropTRxYilKdkiz8LfglF4t0XWtW1uWWGP7Ey6QFlCRS3ZBKGVsEmMbSGVQCc8MMc+ifBfRooP2mfB11DptvYx21nLbyRxRBEeRIpMlf7xwyMT1+cZrSttV161sfCNrpsNk2mQaZbpegoAwYsFVhJjAHlgH1JI617V+z94Yj1HxRrPxakW38qa3Ok2sO0ZgbbES/oCVjKE9ww9Kqbujjr4f2dNtnvUAG/CtwKs1n2chBZmAGWOD6j1q013ap/rJ1X6muc8gmoqkdWtMkLKCPWiqSuB8n/Ez4QfEfwz+0LpPjb4NXQ0mTWHudVsLkraTC1ulQLORFcHaw2uDgqR+8x2BGbrvwn+NHijWZL7xjo2m3N42/wA6/trSwt5r9+AryR24RM7Qeg719CajpNh4/wBK0zV/Evwa0vWptKWW3srq+8QPamBm2CUKqISpbYDyDwOtUv8AhXvhnt8IdJjGNvPiiZuPr5YI6micVPc0TPCPCvwH+L3hnxWbK/8AB0Nz4L8VrHpusWQljtpIomVkNwpU4Vot3mDhtw8xcAsWHOXv7J/xH0u81jwVMlvZaLpN1MNMnupQiTW4LMZkYZVy2Dnn0HavdG+BfwzjkuJF+HWlx/amBmRtZvbhVwQcqXYc8duOT61Z1D4V+AH0vTtATwfZNpWkLmws5tTvJltGMhdvLLPwCxJPA6nrTh7mw0z5o0H4QaL8OfjPa6P408axaSNW8MXEtleWNyt3HLftLHCLUwqhdiVckAY3E4ByDjs9fgkg1/U/C2uxJcXekN9m+1lFQSqQHTCDgNtkDeoyOc8Vt/GH4aeBtJvPAXinRfC+jaNbeGNft5L2eJWE08c08ZO6UkswXaw+bjDY5yRWx8T7e61Lxjfz6icukiT20u7cGi2gHB9MggfSsMRVasejg4KW549pvgu3tAllp1qqbg3nSbArSEnjce+PftXW2fhWK48ReHL+2uAIrOFo5kbnzojkEkdAc4GeT1FXAUiJY4wOvGePp3qP4VQNqfiLxDdmS4W301oYV8xfkUldzqmeBnqTjnI71g6jkexCCiYWq+EdI1SBIJLQQxxu8sSQnBViT044+lPi06GNQAMkKqnn0rZllsyq3Ed9Dtd2J3PtK8nnB5xkYz6msa6uzHMhhePMrrHgtu43HkEZHIrVO6OuEEy/YWiQkCFQo7itQ2kLglowc+tZ9i5fYw6E9K2RtxknAx6VdrmnIiOC3VRmJRkEDH1rzP426K+sadY6pJbPK9otxEmzaQm7Z8xDKecL8vbrnNepwuA0wePay4VQvT1OfwNZni7T4NT0JoZQIoYd9zczbypWJFyQCD3G4e+SOKqPu7GNaCWph+HbXU9Y8I2V3q8sYsraC2GnWFvIn7hUQAszqMs3GCGwONx64r6I8HwRaL4RbTYLm4Q3sy30kb4VopA+fLGOiYHA9zXg/wCzzq6fF1GudJ8LyaNpuixub+3gtI3jnuSh2CJi24LwjMOgOfWvoiz0bxHqEcd4uj3Kq6qwNwwjwOoHzelbJ3Wp4eZVFy8qLa6rfJJPJDMypNK0oHpntSNqU8v+tlZvrS6d4L1m1t/sy3NnGPNZ9tzcGRxuOSBjt6Vej8HXZlYXWvQxRbf+WFpubd6fMenv+lS49jxDHe7Z5AkbOWz0ANFdHb+FdGhkDXeoanOF64kVFbHbAX+tFaQgwOHh1ee1vbtJSHXUnWck42RyqoU4z6gelStrDLMsRVQXGR8grKvdN1a/thBpf2mKUMPna3AKnrwD6jitA6Fq7yiOSJ08sYAJA5xzk+lZmqih818HPzSHJ7AVWa5J+5IfXrV3/hF72QRebPAmzOfmJz9f8KmtvCscJ/eXwGRj5EJJ/E0DscjrVjD4htLvSrxYZLa5SMMf+WgZWzkNjjAGR7+nWszUbW71DwzBfXF2tw1jB9lkAbc4+bjGBzwD3zXpK+FdPKRxNLMUVstg7OO/T2qrqvh3SW0+a1gthaRFQB5Yz93JBPvWNWmpK514aq4Ox4jcRJACqtnjr1/nXEWXh/xpeeHvFGj6DqU0FxqV7ay2mSeWjKlyzD5sH5ckdh0r0fWdOS1u40aIrAZGQkliW+Y4xjp2qpJc6doMVxcajdw2Uunp5nmeZgMrZwAeDk7SCMeg5rkR71KfMkzzm602+eXTdH1meSYLpxa7b+NpMfMc5JOSMgE+3FO8HaXNpEM1nJNLJF5hljDk4VmJLY/Gse+8aXmrTXt/pekXMEc4jSzuRbs0W1erEnkgnJ6c1PpfjbV7SeGPXNA+R7cRtLCp3F8gGQoR8oI3H5eQcYreOx2U3c9G0oLuK9gM1sxhSRj0zXL+Gdfs9dtWvrPTL2yUFoCl1HsZsfxqM8g54PeuotzErAqWIdNgHQgDPJ/T9au9jdD0jABOOtQ6lpd5r/hvW/DthLHHc6xDFp8LyfcV5WKgt14BIJ47VKkoeNWPG4Zx6U/SxcyeIdFto5JBBNq1kZgi5yqzKwz3xxzjscc5xQndnFiXZM9a+C/wytvhN4MsPDMFxDczrH5l5cRptE05+8w9RjjnnGK9BJVyDjn61Bbh5SUtoHkVeOFK4/PFW49P1RyNmnEA93kUf1rpppNHymJk5S1E+Y5PrSHPc1eGi6kAC8ltGD3DliPyFPXw28rBZNVkOT91I8E+wJGK2j7pynI+PvF1l4H8Fal4kvX4soJJ0UKGMjqBtUA8EkkcHtRXkX7a2saZpHhvRfBGnTSyXesTi4uFchm+zR5GQABgF++P4KK1jK4Hq+59+/PU5JodiW3sc59auxeHtZcQl44Iw4Jch9wU54wR14q6nhe8kAWe7RBnIKxg/L6da47GxihlA+RAPwoEjA/Wuij8J2oG2W4lfnPBxVgeGNJwC0DEjvvNFh6HJs+1txYZpqyKzfN93ow2bgR3ruItE0yJY9tlFuUHJIznmp/sdrwBbRjHHC0NXRcHZnz14s02WwSSEpJsdw8eIyHbnoAevWvLde02y1a5S91LS4bmO0wZBcxh8LkErhs4zgZ5zx9K+s/Hng5PE+mrBFarLdxOrW59CTg/UAdq+ZbrRJNQ064kyimeJD1O5TxkMBnngg//AF64Kq5Ge7hp86SPPdavTeXslhBZyQQ6ey20apg4TrkduN36VFbWKyuzts8+5jOcHPTtnrnvz610Op6RFARcif5ZpmBjU4JYBcknvxjjp1qO0toYgrFORnGeTVQlc9WnFI09NjSOM4CqNiKgA4UAYxir6zhGGDkgYzjFULeVFBIZcYyc+lLcXQjyWAXau/OeMcf4itG9C5S5di/NcqoQHuRxWr4QvP8AirtAzJjzNUtlYZx/y0BP8q5pJDK4ZxwOMCn2N0+neIdH1aSUiK01G3cgdcbxnH4A0kmcGJk1Fs+2/svkuevFWFPFK5Ev78AhZFDr7gjNNHWuqF4nytWV56igsG4Jpx/eDy2bAb5SfQGkIxXn/wAdvHUfw/8Ahb4g12KYrffY2t7JV5dp5PlXH0BY5/2a6YJSMj4p+N3jST4j/F/X/EZut9pp0p0bTgjZTyIXILDt8xyegznmiuF023khtQ80haWYmWTJOd7HnOe+aKu3KI/UYKACMDk5NKRnqaUdadgVy2HcYEpdlOwKU4HenYfMxu2jbikaWNFLuwVV6knAFcz8SfiDo/w9+H+r+PNStb69s9FWGaeCxQee8MkgjZ1yRnZncRx0zS6GkXc6dIvOlRACx3LwO/NfJXivU18OeKtRubKz3WUdzPE0EfG3L4Xbg4HPHHHNdz4j+N1/4lmOheDY9Q0PT5E2zX80itdzLjdtjUHEQIKgtknOcdK878ZpEFtWgXAii2SAEbSpOSCAOSc8mvOrzTdj18InFKRwGtaw8c86bVYxS/KjdFyAduT1/wDr1iP4glwiITGYyinAIOSxJPuCOK1dVtnZ2XJYSndx2+tYl3oU7qyx3MsLtGeVGQSOQee+MilSaR7EajaLEnik2sYXeMxPIFBJ5JGencYNWNPu7rVpIrqQY2RlFGCFCnrn35qla6BCzG4uYmkbzVYDqoTuCPTr+ddXZ2UMYYLGF6AADAA+lbNc2xUZOWjJdOMrxB5N29/m+YY+U9CKt3GmxXirHM8iLuUloz8ygHkj3xnFS28RjKxMxwvCgdAPp2q9szTimmZVo3Vj6M+CvxDbxRodnoWr6gJNWsEFsxlcGW5XJ2yerHBAJ9R6V6XtJORnaeVOPvDOMj8a+I5hdpJZJplxLFf3Fx5doYWKSCZRuUhh0+oOeK+kvBH/AAk+geGbGy13xFc6lrEyxyane3CL+/nONzbFwIwoO0AdQozzXfTjzo+axdFwmz0wJuB5GQK+N/22/Gr33irQfh5Zyq8enRjVLxcdJWyEU/Rcn6kYr6XHjyLTbWfWtYVV062jkmllRslQnPQdsd+35V+eninxFd+OfGWt+Mb+Zn/tK8klgzn5Ic4RB6AADj3NbRg46s4iig2pubq3JopHbjAOcUVooqW4H6hgZpdvvTPtVsP+W8f/AH0Kje8hxxMh/wCBCuVcr6gTHA6moXuEXLbgAtUprosflcce9VZ5WZSAe46VqowW8l94EmpOZtLlQhGLjgY4znj8ay9a0+z8QaTcaTqVrHLaXlt9mniYZVkOMj9P0rRJUwhCQfamlR2IH40mqb0ujSL5T5x8R+Db3wRqEUE1sHtCGSGYjKFQOFJ656dsZrnbyJLlh5qnKcYJwR+FfTOuWuh39pJBq1zbrAgxI0kijZ36np618veLfEPw50O/lk0Px54fvrW6n8uMxazbvsbdtLMFYk47nsK8jFUXze7qe1hsRT5bSaRmXNmjS5HQetVpLEGRDtG0HJFSy+KfCYVnHibSWVTgyfbI9p+hzVeHxX4VupVgt/E2kyyMdqpHexsxPoAGrKNKa6M9OGIoW+NfeidbRATtXAPFW4Ew2cdqbeXFrpzxxahcxWrzHEazOELn2B61saZ4d1/UozNpuiX93GMfPBbPIoz05UGulRkuhvCvhlvNfeirHw3uasCeKEBpELZIG0HBJ9K1G8H+LI4Xk/4RTVtyLnH2GUk/QBetdr4O+F9zGP7a8VWxjC7HjgZSBG2eC2QOuenY1tCKe5jicXQgrwmm/UZ8NfB8kNwnizWrdUusbrBBx5Snq3B5JAHUV6Q8jEYLfewOTU50i4hIRLWTaB/dPFE9lcog22kzeyoT/SvSpRpQ+0vvPncVifbO54b+094lOlfDh9HthLGup3Is0nilVduQC6kkhmztAwoIwDkjivl+CP7PZxRA5KqK9j+PHhr4jeM/iQ8mn/D3xLJpmixfZ7WWPS55I5nbmRlITGDgcg9RXC/8Kv8AiY2Ek+G/ikLnquj3H5fcrSpOnbSS+889HMRLcTMFiBkbcAqjjBPGSe/0orvm+G3j/RNCnv1+HXiW71KdlVbeHR7hgijvwnWipjOC6oD/2Q== + * remark : + * subject_type : 0 + * description : + * inviter_id : null + * timestamp : 1533808724 + * start_time : 0 + * title : + * interviewee : + * job_number : + * entry_date : null + * origin_photo_id : 3 + * birthday : null + * avatar : /static/upload/photo/2018-08-09/v2_cec2cd5140b55db4051d9c69775ec6ebaea5947b.jpg + * department : + * end_time : 0 + * interviewee_pinyin : + * id : 5 + * name : ndy + */ + + private String src; + private String remark; + private int subject_type; + private String description; + private Object inviter_id; + private int timestamp; + private int start_time; + private String title; + private String interviewee; + private String job_number; + private Object entry_date; + private int origin_photo_id; + private Object birthday; + private String avatar; + private String department; + private int end_time; + private String interviewee_pinyin; + private int id; + private String name; + + public String getSrc() { + return src; + } + + public void setSrc(String src) { + this.src = src; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public int getSubject_type() { + return subject_type; + } + + public void setSubject_type(int subject_type) { + this.subject_type = subject_type; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Object getInviter_id() { + return inviter_id; + } + + public void setInviter_id(Object inviter_id) { + this.inviter_id = inviter_id; + } + + public int getTimestamp() { + return timestamp; + } + + public void setTimestamp(int timestamp) { + this.timestamp = timestamp; + } + + public int getStart_time() { + return start_time; + } + + public void setStart_time(int start_time) { + this.start_time = start_time; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getInterviewee() { + return interviewee; + } + + public void setInterviewee(String interviewee) { + this.interviewee = interviewee; + } + + public String getJob_number() { + return job_number; + } + + public void setJob_number(String job_number) { + this.job_number = job_number; + } + + public Object getEntry_date() { + return entry_date; + } + + public void setEntry_date(Object entry_date) { + this.entry_date = entry_date; + } + + public int getOrigin_photo_id() { + return origin_photo_id; + } + + public void setOrigin_photo_id(int origin_photo_id) { + this.origin_photo_id = origin_photo_id; + } + + public Object getBirthday() { + return birthday; + } + + public void setBirthday(Object birthday) { + this.birthday = birthday; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public int getEnd_time() { + return end_time; + } + + public void setEnd_time(int end_time) { + this.end_time = end_time; + } + + public String getInterviewee_pinyin() { + return interviewee_pinyin; + } + + public void setInterviewee_pinyin(String interviewee_pinyin) { + this.interviewee_pinyin = interviewee_pinyin; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/dto/HeartBeat.java b/app/src/main/java/com/ydd/sportfaceid/net/dto/HeartBeat.java new file mode 100644 index 0000000..c46b6f4 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/dto/HeartBeat.java @@ -0,0 +1,44 @@ +package com.ydd.sportfaceid.net.dto; + + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +/** + * 客户端心跳数据包 + * HeartBeat.java + * + * @author peakren + * @date 07/12/2017 10:23 PM + */ +public class HeartBeat implements Serializable { + + @Expose + private String versionCode; //客户端版本号 + + @Expose + private String apkUrl; //升级的软件下载地址 + + + public String getVersionCode() { + return versionCode; + } + + /** + * 客户端版本号 + * + * @param versionCode + */ + public void setVersionCode(String versionCode) { + this.versionCode = versionCode; + } + + public String getApkUrl() { + return apkUrl; + } + + public void setApkUrl(String apkUrl) { + this.apkUrl = apkUrl; + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/dto/MemberDto.java b/app/src/main/java/com/ydd/sportfaceid/net/dto/MemberDto.java new file mode 100644 index 0000000..9fa3d1b --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/dto/MemberDto.java @@ -0,0 +1,148 @@ +package com.ydd.sportfaceid.net.dto; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; +import java.math.BigDecimal; + + +/** + * 会员基本信息 + * MemberDto.java + * + * @author peakren + * @date 2018/12/20 8:39 PM + */ +public class MemberDto implements Serializable { + + /** + * 头像 + */ + @Expose + private String avatar; + + /** + * 姓名 + */ + @Expose + private String name; + + /** + * 手机号码 + */ + @Expose + private String mobile; + + /** + * 余额 + */ + @Expose + private BigDecimal amount; + + /** + * 场地名称 + */ + @Expose + private String placeName; + + /** + * 会员卡名称 + */ + @Expose + private String cardName; + + @Expose + private String message; + + /** + * 1成功进场 0不允许进场 + */ + @Expose + private int code; + + @Expose + private BigDecimal placePrice; + + @Expose + private boolean first; + + public BigDecimal getPlacePrice() { + return placePrice; + } + + public void setPlacePrice(BigDecimal placePrice) { + this.placePrice = placePrice; + } + + public boolean isFirst() { + return first; + } + + public void setFirst(boolean first) { + this.first = first; + } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public BigDecimal getAmount() { + return amount; + } + + public void setAmount(BigDecimal amount) { + this.amount = amount; + } + + public String getPlaceName() { + return placeName; + } + + public void setPlaceName(String placeName) { + this.placeName = placeName; + } + + public String getCardName() { + return cardName; + } + + public void setCardName(String cardName) { + this.cardName = cardName; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/net/dto/Message.java b/app/src/main/java/com/ydd/sportfaceid/net/dto/Message.java new file mode 100644 index 0000000..402913d --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/net/dto/Message.java @@ -0,0 +1,68 @@ +package com.ydd.sportfaceid.net.dto; + +import com.google.gson.annotations.Expose; + +/** + *
上位机与通讯服务器的数据协议格式
+ * + * @author peakren + * @date 07/12/2017 9:57 PM + */ +public class Message extends BaseDto { + + private static final long serialVersionUID = -7944124768291562453L; + + /** + * 消息内容 + */ + @Expose + private MemberDto result; + + + @Expose + private FaceImageDto faceImage; + + /** + * 机器识别返回字符串 + */ + @Expose + private String content; + + + public int getDoor() { + return door; + } + + public void setDoor(int door) { + this.door = door; + } + + @Expose + private int door; + + + public MemberDto getResult() { + return result; + } + + public void setResult(MemberDto result) { + this.result = result; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public FaceImageDto getFaceImage() { + return faceImage; + } + + public void setFaceImage(FaceImageDto faceImage) { + this.faceImage = faceImage; + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/receiver/BootCompletedReceiver.java b/app/src/main/java/com/ydd/sportfaceid/receiver/BootCompletedReceiver.java new file mode 100644 index 0000000..5bad737 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/receiver/BootCompletedReceiver.java @@ -0,0 +1,30 @@ +package com.ydd.sportfaceid.receiver; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import com.ydd.sportfaceid.MainActivity; + +/** + *

Copyright © 2017 Zego. All rights reserved.

+ * + * @author realuei on 01/11/2017. + */ + +public class BootCompletedReceiver extends BroadcastReceiver { + + private final String TAG = "YDD_SPORT"; + + @Override + public void onReceive(Context context, Intent intent) { + try { + Intent i = new Intent(context, MainActivity.class); + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(i); + } catch (Exception e) { + Log.e(TAG, "start the guard service failed.", e); + } + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/service/ClientService.java b/app/src/main/java/com/ydd/sportfaceid/service/ClientService.java new file mode 100644 index 0000000..af03268 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/service/ClientService.java @@ -0,0 +1,66 @@ +package com.ydd.sportfaceid.service; + +import android.app.IntentService; +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.support.annotation.Nullable; +import android.util.Log; + +import com.ydd.sportfaceid.StartApplication; +import com.ydd.sportfaceid.net.ClientThread; +import com.ydd.sportfaceid.websocket.FaceWsClient; +import com.ydd.sportfaceid.websocket.FaceWsClientService; + +/** + * 启动socker和websocket服务 + * + * @author peakren + * @date 05/12/2017 10:25 PM + */ +public class ClientService extends IntentService { + + public ClientService() { + super("new cocket"); + } + + @Override + public void onCreate() { + super.onCreate(); +//启动服务器socket连接 + + Log.d("sander", "clientThread run"); + StartApplication.executor.execute(new Runnable() { + @Override + public void run() { + ClientThread.getInstance().run(); + } + }); + } + +// @Override +// public int onStartCommand(Intent intent, int flags, int startId) { +// return super.onStartCommand(intent, flags, startId); +// } +// +// @Override +// public void onDestroy() { +// super.onDestroy(); +// } +// +// @Override +// public IBinder onBind(Intent intent) { +// return null; +// } + + @Override + protected void onHandleIntent(Intent intent) { + /** + * 启动face++ websocket连接 + */ + FaceWsClientService.getInstance().start(); + + Log.d("sander","这里在重复启动hanglde intent service"); + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/service/MessageService.java b/app/src/main/java/com/ydd/sportfaceid/service/MessageService.java new file mode 100644 index 0000000..5f50bcb --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/service/MessageService.java @@ -0,0 +1,181 @@ +package com.ydd.sportfaceid.service; + + +import android.util.Base64; +import android.util.Log; +import android.widget.Toast; + +import com.google.gson.Gson; +import com.ydd.sportfaceid.BuildConfig; +import com.ydd.sportfaceid.StartApplication; +import com.ydd.sportfaceid.event.FaceidEvent; +import com.ydd.sportfaceid.net.Cmd; +import com.ydd.sportfaceid.net.dto.AddFaceResponse; +import com.ydd.sportfaceid.net.dto.FaceImageDto; +import com.ydd.sportfaceid.net.dto.Message; +import com.ydd.sportfaceid.session.ClientTcpSession; +import com.ydd.sportfaceid.utils.AppLogger; +import com.ydd.sportfaceid.utils.DeviceIdUtil; +import com.ydd.sportfaceid.utils.JsonMapper; + +import org.greenrobot.eventbus.EventBus; + +import java.io.Console; +import java.io.IOException; +import java.util.UUID; + +import Net.PC15.Command.CommandDetial; +import Net.PC15.Connector.ConnectorAllocator; +import Net.PC15.Connector.E_ControllerType; +import Net.PC15.Connector.TCPClient.TCPClientDetial; +import Net.PC15.FC8800.Command.Door.OpenDoor; +import Net.PC15.FC8800.Command.Door.Parameter.OpenDoor_Parameter; +import Net.PC15.FC8800.FC8800Identity; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; + +/** + * 消息服务 + * MessageService.java + * + * @author peakren + * @date 2018/12/20 6:00 PM + */ +public class MessageService { + + private final static String TAG = "MessageService"; + + + static private MessageService sInstance; + + static public MessageService getInstance() { + if (sInstance == null) { + synchronized (ClientTcpSession.class) { + if (sInstance == null) { + sInstance = new MessageService(); + } + } + } + return sInstance; + } + + /** + * 解析并执行接受服务器消息 + * + * @param message + */ + public void execute(Message message) { + if (null == message) { + return; + } + Cmd cmd = Cmd.getCmd(message.getCmdId()); + switch (cmd) { + case HB: + break; + case FACEID: + EventBus.getDefault().post(new FaceidEvent(message.getResult())); + break; + //识别结果返回 + case OPEN_DOOR: + AppLogger.getInstance().writeLog("----receive open door cmd----"); + StartApplication.executor.execute(new Runnable() { + @Override + public void run() { + openDoor(message.getDoor()); + } + }); + break; + + //接收人脸照片 + case RECEV_FACE_IMAGE: + //获取图片内容 + String imageBase64 = message.getContent(); + StartApplication.executor.execute(new Runnable() { + @Override + public void run() { + try { + Integer faceId = uploadFace(imageBase64); + Message sendMsg = new Message(); + sendMsg.setCmdId(Cmd.RECEV_FACE_IMAGE_R.id); + sendMsg.setDeviceId(DeviceIdUtil.generateDeviceId(StartApplication.getAppContext())); + FaceImageDto faceImage = new FaceImageDto(); + faceImage.setFaceId(faceId); + if (sendMsg.getFaceImage() != null) { + faceImage.setMemberId(sendMsg.getFaceImage().getMemberId()); + } + sendMsg.setFaceImage(faceImage); + //返回上传结果 + ClientTcpSession.getInstance().send(sendMsg); + } catch (Exception e) { + Log.e(TAG, "upload face image error..."); + } + } + }); + break; + } + + } + + /** + * 门禁开门 + */ + public void openDoor(int ivalue) { + try { + AppLogger.getInstance().writeLog("----init open door tcp ----"); + ConnectorAllocator connector = ConnectorAllocator.GetAllocator(); + TCPClientDetial tcpClientDetial = new TCPClientDetial(BuildConfig.DOOR_SERVER_IP, Integer.valueOf(BuildConfig.DOOR_SERVER_PORT)); + connector.GetCommandCount(tcpClientDetial); + connector.OpenForciblyConnect(tcpClientDetial); + CommandDetial detial = new CommandDetial(); + detial.Connector = tcpClientDetial; + detial.Identity = new FC8800Identity(BuildConfig.DOOR_SN, BuildConfig.DOOR_PWD, E_ControllerType.FC8900); + OpenDoor_Parameter openDoor_parameter = new OpenDoor_Parameter(detial); + openDoor_parameter.Door.SetDoor(ivalue, 1); + OpenDoor openDoor = new OpenDoor(openDoor_parameter); + boolean command = connector.AddCommand(openDoor); + if (openDoor.getIsTimeout()) { + AppLogger.getInstance().writeLog("----open door timeout ----"); + } + } catch (Exception e) { + AppLogger.getInstance().writeLog("----open door error ----", e.getMessage()); + } + } + + /** + * 上传识别头像 + * + * @param faceImageBase64 + */ + public Integer uploadFace(String faceImageBase64) throws IOException { + String url = "http://192.168.1.111/subject/photo"; + byte[] buffer = Base64.decode(faceImageBase64, Base64.DEFAULT); + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("photo", System.currentTimeMillis() + "", RequestBody.create(MediaType.parse("multipart/form-data"), buffer)) + .build(); + Request request = new Request.Builder() + .header("Authorization", "Client-ID " + UUID.randomUUID()) + .url(url) + .post(requestBody) + .build(); + + Response response = client.newCall(request).execute(); + if (!response.isSuccessful()) { + throw new IOException("Unexpected code " + response); + } + + ResponseBody responseBody = response.body(); + AddFaceResponse faceResponse = JsonMapper.fromJson(responseBody.string(), AddFaceResponse.class); + if (faceResponse.getCode() == 0) { + return faceResponse.getData().getId(); + } + return -1; + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/session/ClientTcpSession.java b/app/src/main/java/com/ydd/sportfaceid/session/ClientTcpSession.java new file mode 100644 index 0000000..b2f8934 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/session/ClientTcpSession.java @@ -0,0 +1,53 @@ +package com.ydd.sportfaceid.session; + + +import com.ydd.sportfaceid.net.dto.Message; + +import io.netty.channel.ChannelHandlerContext; + +/** + * 通讯服务器session持久化 + * + * @author peakren + * @date 07/12/2017 10:42 PM + */ +public class ClientTcpSession { + + private static ChannelHandlerContext context; + + static private ClientTcpSession sInstance; + + static public ClientTcpSession getInstance() { + if (sInstance == null) { + synchronized (ClientTcpSession.class) { + if (sInstance == null) { + sInstance = new ClientTcpSession(); + } + } + } + return sInstance; + } + + public ChannelHandlerContext getContext() { + return this.context; + } + + public void setContext(ChannelHandlerContext context) { + this.context = context; + } + + + public void send(Message message) { + if (context != null) { + context.writeAndFlush(message); + } + } + + + public void close() { + if (context != null) { + context.close(); + context = null; + } + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/setting/SDSettingActivity.java b/app/src/main/java/com/ydd/sportfaceid/setting/SDSettingActivity.java new file mode 100644 index 0000000..df5eb4d --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/setting/SDSettingActivity.java @@ -0,0 +1,85 @@ +package com.ydd.sportfaceid.setting; + +import android.content.Intent; +import android.media.Image; +import android.support.annotation.BinderThread; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; + +import com.ydd.sportfaceid.MainActivity; +import com.ydd.sportfaceid.R; +import com.ydd.sportfaceid.config.SDAppConfig; +import com.ydd.sportfaceid.main.SDBaseActivity; + +import butterknife.BindView; +import butterknife.OnClick; + +public class SDSettingActivity extends SDBaseActivity { + + + @BindView(R.id.camer_check_1) + ImageView camer_check_1_image_view; + + @BindView(R.id.camer_check_2) + ImageView camer_check_2_image_view; + + + private int selectedCameraIndex; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_sdsetting); + + this.configView(); + this.configData(); + } + + + private void configView(){ + this.camer_check_1_image_view.setVisibility(View.GONE); + this.camer_check_2_image_view.setVisibility(View.GONE); + } + private void configData(){ + this.setSelectedCameraIndex(SDAppConfig.getInstance().getCurrent_selected_camera()); + } + public void setSelectedCameraIndex(int selectedCameraIndex) { + this.selectedCameraIndex = selectedCameraIndex; + if (this.selectedCameraIndex == 0 ){ + this.camer_check_2_image_view.setVisibility(View.GONE); + this.camer_check_1_image_view.setVisibility(View.VISIBLE); + }else if (this.selectedCameraIndex == 1){ + this.camer_check_2_image_view.setVisibility(View.VISIBLE); + this.camer_check_1_image_view.setVisibility(View.GONE); + } + SDAppConfig.getInstance().setCurrent_selected_camera(selectedCameraIndex); + } + + + public void onGoToMainAction(){ + finish(); + } + + @OnClick({R.id.back_button,R.id.camer_cell_1, R.id.camer_cell_2}) void onCilck(View view){ + switch (view.getId()){ + case R.id.back_button: + this.onGoToMainAction(); + break; + case R.id.camer_cell_1: + this.setSelectedCameraIndex(0); + break; + case R.id.camer_cell_2: + this.setSelectedCameraIndex(1); + break; + } + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + this.onGoToMainAction(); + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/utils/AppLogger.java b/app/src/main/java/com/ydd/sportfaceid/utils/AppLogger.java new file mode 100644 index 0000000..d80dfe1 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/utils/AppLogger.java @@ -0,0 +1,297 @@ +package com.ydd.sportfaceid.utils; + +import android.content.Context; +import android.os.Environment; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import com.ydd.sportfaceid.StartApplication; +import java.io.BufferedWriter; +import java.io.Closeable; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +/** + *

Copyright © 2017 Zego. All rights reserved.

+ * + * @author realuei on 26/10/2017. + */ + +public class AppLogger { + + static final private String TAG = "YDD_WWJ"; + + static final private int MSG_ID_WRITE_LOG = 1; + static final private int MSG_ID_CLEAR_LOG = 2; + + static final private int SINGLE_LOG_FILE_MAX_SIZE = 100 * 1024 * 1024; // 100M + + static private String LOG_FILE_NAME = "face_sport.log"; + static private String LOG_FILE_NAME_BAK = "face_sport_2.log"; + + static private AppLogger sInstance; + + final private LinkedList mLogList = new LinkedList<>(); + final private List mUnmodifiableList = Collections.unmodifiableList(mLogList); + + private HandlerThread mLogThread; + private Handler mLogHandler; + + private ArrayList mListeners = new ArrayList<>(); + + private File mLogFile; + private Writer mLogWriter; + + private AppLogger() { + initLogFile(); + + mLogThread = new HandlerThread("ydd_face_logger"); + mLogThread.start(); + + mLogHandler = new Handler(mLogThread.getLooper()) { + + private int loopCnt = 0; + + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_ID_WRITE_LOG: { + flushLogFileIfNeed(); + + String message = (String) msg.obj; + + Log.d(TAG, message); + + String message_with_time = String.format("%s %s", TimeUtil.getLogStr(), message); + mLogList.addFirst(message_with_time); + safeWriteLog2File(message_with_time); + + for (OnLogChangedListener listener : mListeners) { + listener.onLogDataChanged(); + } + } + break; + + case MSG_ID_CLEAR_LOG: { + mLogList.clear(); + for (OnLogChangedListener listener : mListeners) { + listener.onLogDataChanged(); + } + } + break; + } + + } + + private void flushLogFileIfNeed() { + loopCnt++; + if (loopCnt >= 10) { + loopCnt = 0; + if (mLogWriter != null) { + try { + mLogWriter.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + int logLength = mLogList.size(); + if (logLength > 1500) { + for (int i = logLength - 1; i >= 1000; i--) { + mLogList.remove(i); + } + + if (mLogFile.length() >= SINGLE_LOG_FILE_MAX_SIZE) { + initLogFile(); + } + } + } + }; + } + + static public void setLogFileName(String logName, String bakLogName) { + LOG_FILE_NAME = logName; + LOG_FILE_NAME_BAK = bakLogName; + } + + static public AppLogger getInstance() { + if (sInstance == null) { + synchronized (AppLogger.class) { + if (sInstance == null) { + sInstance = new AppLogger(); + } + } + } + return sInstance; + } + + private void initLogFile() { + String logPath = getLogPath(StartApplication.getAppContext()); + File logFile = new File(logPath, LOG_FILE_NAME); + if (logFile.exists() && logFile.length() >= SINGLE_LOG_FILE_MAX_SIZE) { // 日志文件存在,且文件尺寸大于 10M 时,备份日志 + File bakLogFile = new File(logPath, LOG_FILE_NAME_BAK); + if (bakLogFile.exists()) { + bakLogFile.delete(); + } + + safeCloseStream(mLogWriter); + logFile.renameTo(bakLogFile); + } + + mLogFile = new File(logPath, LOG_FILE_NAME); + try { + safeCloseStream(mLogWriter); + + mLogWriter = new BufferedWriter(new FileWriter(mLogFile, true)); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void safeWriteLog2File(String content) { + if (mLogWriter == null) return; + + try { + mLogWriter.write(content); + mLogWriter.write("\r\n"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void safeCloseStream(Closeable stream) { + if (stream != null) { + try { + stream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + public void writeLog(final String format, final Object... args) { + String data; + + if (args.length == 0) { + data = format; + } else { + data = String.format(format, args); + } + + Message msg = Message.obtain(); + msg.what = MSG_ID_WRITE_LOG; + msg.obj = data; + mLogHandler.sendMessage(msg); + } + + /** + * 返回只读日志列表 + * + * @return 只读日志列表 + */ + public List getAllLog() { + return mUnmodifiableList; + } + + public void clearLog() { + mLogHandler.sendEmptyMessage(MSG_ID_CLEAR_LOG); + } + + public void registerLogChangedListener(final OnLogChangedListener listener) { + if (listener == null) return; + + mLogHandler.post(new Runnable() { + @Override + public void run() { + boolean inExists = false; + for (OnLogChangedListener _listener : mListeners) { + if (listener == _listener) { + inExists = true; + break; + } + } + + if (!inExists) { + mListeners.add(listener); + } + } + }); + } + + public void unregisterLogChangedListener(final OnLogChangedListener listener) { + if (listener == null) return; + + mLogHandler.post(new Runnable() { + @Override + public void run() { + int idx = -1; + for (int i = 0; i < mListeners.size(); i++) { + if (mListeners.get(i) == listener) { + idx = i; + break; + } + } + + if (idx >= 0) { + mListeners.remove(idx); + } + } + }); + } + + public interface OnLogChangedListener { + void onLogDataChanged(); + } + + + public static String getLogPath(Context context) { + if (context == null) { + return null; + } else { + File dir = null; + File filesDir; + String filesDirPath; + if (Environment.getExternalStorageState().equals("mounted")) { + filesDir = context.getExternalFilesDir((String) null); + if (filesDir != null) { + filesDirPath = filesDir.getAbsolutePath(); + if (!TextUtils.isEmpty(filesDirPath)) { + dir = new File(filesDirPath); + } + } + } + + if (dir == null) { + filesDir = context.getFilesDir(); + if (filesDir != null) { + filesDirPath = filesDir.getAbsolutePath(); + if (!TextUtils.isEmpty(filesDirPath)) { + dir = new File(filesDirPath); + } + } + } + + if (dir == null) { + return null; + } else { + if (!dir.exists()) { + dir.mkdirs(); + if (!dir.exists()) { + return null; + } + } + + return dir.getAbsolutePath().toString(); + } + } + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/utils/AppUtil.java b/app/src/main/java/com/ydd/sportfaceid/utils/AppUtil.java new file mode 100644 index 0000000..399c19b --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/utils/AppUtil.java @@ -0,0 +1,50 @@ +package com.ydd.sportfaceid.utils; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; + +/** + * Created by peakren on 07/12/2017. + */ + +public class AppUtil { + + /** + * get App versionCode + * + * @param context + * @return + */ + public static String getVersionCode(Context context) { + PackageManager packageManager = context.getPackageManager(); + PackageInfo packageInfo; + String versionCode = ""; + try { + packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_CONFIGURATIONS); + versionCode = packageInfo.versionCode + ""; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return versionCode; + } + + /** + * get App versionName + * + * @param context + * @return + */ + public static String getVersionName(Context context) { + PackageManager packageManager = context.getPackageManager(); + PackageInfo packageInfo; + String versionName = ""; + try { + packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_CONFIGURATIONS); + versionName = packageInfo.versionName; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return versionName; + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/utils/DeviceIdUtil.java b/app/src/main/java/com/ydd/sportfaceid/utils/DeviceIdUtil.java new file mode 100644 index 0000000..a9d0b25 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/utils/DeviceIdUtil.java @@ -0,0 +1,106 @@ +package com.ydd.sportfaceid.utils; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Build; +import android.provider.Settings; +import android.text.TextUtils; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.lang.reflect.Method; +import java.util.UUID; + +/** + *

Copyright © 2017 Zego. All rights reserved.

+ * + * @author realuei on 08/11/2017. + */ + +public class DeviceIdUtil { + static final private String INVALID_SERIAL_NUMBER = "12345678900"; + + @SuppressLint("MissingPermission") + static final public String generateDeviceId(Context context) { + String deviceId = getEthernetMac(); + if (!TextUtils.isEmpty(deviceId) && !Build.UNKNOWN.equals(deviceId)) { + return deviceId; + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + deviceId = Build.SERIAL; + } else { + deviceId = Build.SERIAL; + } + + if (!Build.UNKNOWN.equals(deviceId) && !INVALID_SERIAL_NUMBER.equals(deviceId)) { + return deviceId; + } + + try { + Class c = Class.forName("android.os.SystemProperties"); + Method get = c.getMethod("get", String.class, String.class ); + deviceId = (String)(get.invoke(c, "ro.serialno", Build.UNKNOWN)); + } catch (Exception e) { + deviceId = null; + } + + if (!TextUtils.isEmpty(deviceId) && !Build.UNKNOWN.equals(deviceId) && !INVALID_SERIAL_NUMBER.equals(deviceId)) { + return deviceId; + } + + deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); + if (!"9774d56d682e549c".equals(deviceId) && !INVALID_SERIAL_NUMBER.equals(deviceId) + && !TextUtils.isEmpty(deviceId) && deviceId.length() > 6) { + return deviceId; + } + + // wifi mac地址 + WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + WifiInfo info = wifi.getConnectionInfo(); + String wifiMac = info.getMacAddress(); + if(!TextUtils.isEmpty(wifiMac)){ + return String.format("w%s", wifiMac.replace(":", "")); + } + + return UUID.randomUUID().toString().replace("-", ""); + } + + /** + * 获取有线网卡的 MAC 地址 + * @return + */ + static private String getEthernetMac() { + String macSerial = null; + String str = ""; + try { + Process pp = Runtime.getRuntime().exec("cat /sys/class/net/eth0/address "); + InputStreamReader ir = new InputStreamReader(pp.getInputStream()); + LineNumberReader input = new LineNumberReader(ir); + + for (; null != str; ) { + str = input.readLine(); + if (str != null) { + macSerial = str.trim();// 去空格 + break; + } + } + } catch (IOException ex) { + // 赋予默认值 + ex.printStackTrace(); + + return Build.UNKNOWN; + } + + if (macSerial != null && macSerial.length() > 0) + macSerial = macSerial.replaceAll(":", ""); + else { + return Build.UNKNOWN; + } + + return macSerial; + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/utils/EggClickUtil.java b/app/src/main/java/com/ydd/sportfaceid/utils/EggClickUtil.java new file mode 100644 index 0000000..3f49f8c --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/utils/EggClickUtil.java @@ -0,0 +1,39 @@ +package com.ydd.sportfaceid.utils; + +import android.os.SystemClock; + +public class EggClickUtil { + + final static int COUNTS = 5;//点击次数 + final static long DURATION = 1 * 1000;//规定有效时间 + long[] mHits = new long[COUNTS]; + + public void setEggClickListener(onEggClickListener eggClickListener) { + this.eggClickListener = eggClickListener; + } + + private onEggClickListener eggClickListener; + + public EggClickUtil(){ + + } + public EggClickUtil(onEggClickListener listener){ + this.eggClickListener = listener; + } + + + public void checkoutHideFunction(){ + System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); + mHits[mHits.length - 1] = SystemClock.uptimeMillis(); + if (mHits[0] >= (SystemClock.uptimeMillis() - DURATION)) { + mHits = new long[COUNTS]; + if (this.eggClickListener != null){ + this.eggClickListener.onClickAction(); + } + } + } + + public interface onEggClickListener { + void onClickAction(); + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/utils/JsonMapper.java b/app/src/main/java/com/ydd/sportfaceid/utils/JsonMapper.java new file mode 100644 index 0000000..3b88d02 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/utils/JsonMapper.java @@ -0,0 +1,62 @@ +package com.ydd.sportfaceid.utils; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.List; + +/** + * Created by ranfi on 12/9/14. + */ +public class JsonMapper { + + private final static Gson gson; + + static { + GsonBuilder builder = new GsonBuilder(); + builder.setDateFormat("yyyy-MM-dd HH:mm:ss"); + builder.excludeFieldsWithoutExposeAnnotation(); + gson = builder.create(); + } + + private JsonMapper() { + + } + + /** + * Object可以是POJO,也可以是Collection或数组。 如果对象为Null, 返回"null". 如果集合为空集合, 返回"[]". + * + * @param obj + * @return + */ + public static String toJson(Object obj) { + return gson.toJson(obj); + } + + + public static String toJson(Object obj, Type type) { + return gson.toJson(obj, type); + } + + /** + * 反序列化POJO或简单Collection如List. + *

+ * 如果JSON字符串为Null或"null"字符串, 返回Null. 如果JSON字符串为"[]", 返回空集合. + *

+ * 如需反序列化复杂Collection如List, 请使用fromJson(String, JavaType) + */ + public static T fromJson(String jsonValue, Class clazz) { + return gson.fromJson(jsonValue, clazz); + } + + public static T fromJson(String jsonValue, Type type) { + return gson.fromJson(jsonValue, type); + } + + public static List fromJson(String jsonValue) { + return gson.fromJson(jsonValue, new TypeToken>() { + }.getType()); + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/utils/SharedPreferencesUtil.java b/app/src/main/java/com/ydd/sportfaceid/utils/SharedPreferencesUtil.java new file mode 100644 index 0000000..3e3b24a --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/utils/SharedPreferencesUtil.java @@ -0,0 +1,135 @@ +package com.ydd.sportfaceid.utils; + +import android.content.Context; +import android.content.SharedPreferences; + +import com.ydd.sportfaceid.BuildConfig; +import com.ydd.sportfaceid.StartApplication; + + +/** + * Created by hehelt on 15/12/23. + *

+ * 本地SharePreference存储帮助类 + */ +public class SharedPreferencesUtil { + + private static SharedPreferences infoShare; + + private static SharedPreferences serverShare; + + + //初始化 + private static void initInfoShare() { + if (infoShare == null) { + infoShare = StartApplication.getAppContext().getSharedPreferences("info", Context.MODE_PRIVATE); + } + } + + private static void initServerShare() { + if (serverShare == null) { + serverShare = StartApplication.getAppContext().getSharedPreferences("server", Context.MODE_PRIVATE); + } + } + + + public static boolean setServerIpAndPort(String ip, int port) { + initServerShare(); + if (getServerIp().equals(ip) && getServerPort() == port) { + return false; + } + serverShare.edit().putString("serverIp", ip).putInt("serverPort", port).apply(); + return true; + } + + public static String getServerIp() { + initServerShare(); + return serverShare.getString("serverIp", BuildConfig.SERVER_IP); + } + + public static int getServerPort() { + initServerShare(); + return serverShare.getInt("serverPort", Integer.parseInt(BuildConfig.SERVER_PORT)); + } + + /** + * 设置face++的连接地址和端口 + * + * @param url + * @return + */ + public static boolean setFaceidWsUrl(String url) { + initServerShare(); + if (getFaceidWsUrl().equals(url)) { + return false; + } + serverShare.edit().putString("faceidWsUrl", url).apply(); + return true; + } + + public static String getFaceidWsUrl() { + initServerShare(); + return serverShare.getString("faceidWsUrl", BuildConfig.FACEID_WS_URL); + } + + /** + * 设置门禁的连接地址和端口 + * + * @param ip + * @param port + * @return + */ + public static boolean setDoorServerIpAndPort(String ip, int port) { + initServerShare(); + if (getDoorServerIp().equals(ip) && getDoorServerPort() == port) { + return false; + } + serverShare.edit().putString("doorServerIp", ip).putInt("doorServerPort", port).apply(); + return true; + } + + public static String getDoorServerIp() { + initServerShare(); + return serverShare.getString("doorServerIp", BuildConfig.DOOR_SERVER_IP); + } + + public static int getDoorServerPort() { + initServerShare(); + return serverShare.getInt("doorServerPort", Integer.parseInt(BuildConfig.DOOR_SERVER_PORT)); + } + + + public static SharedPreferences netConfig; + + public static void setIsNetConfig(boolean isSet) { + netConfig = StartApplication.getAppContext().getSharedPreferences("netConfig", Context.MODE_PRIVATE); + netConfig.edit().putBoolean("flag", isSet).apply(); + } + + public static boolean getNetConfig() { + netConfig = StartApplication.getAppContext().getSharedPreferences("netConfig", Context.MODE_PRIVATE); + return netConfig.getBoolean("flag", false); + } + + public static void saveIp(String ip) { + if (null != ip && !"".equals(ip)) { + initLocalIp(); + localIp.edit().putString("ip", ip).apply(); + } + } + + public static String getLocalIp() { + initLocalIp(); + String ip = localIp.getString("ip", "0.0.0.0"); + return ip; + } + + public static void initLocalIp() { + if (localIp == null) { + localIp = StartApplication.getAppContext().getSharedPreferences("localIp", Context.MODE_PRIVATE); + } + } + + public static SharedPreferences localIp; + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/utils/TimeUntil.java b/app/src/main/java/com/ydd/sportfaceid/utils/TimeUntil.java new file mode 100644 index 0000000..2d094f6 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/utils/TimeUntil.java @@ -0,0 +1,48 @@ +package com.ydd.sportfaceid.utils; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +/** + * Created by sandershan on 2018/11/27. + */ + +public class TimeUntil { + public static String getWeakDay(Date date){ + String Week = ""; + Calendar c = Calendar.getInstance(); + try { + + c.setTime(date); + + } catch (Exception ex ){ + ex.printStackTrace(); + } + if (c.get(Calendar.DAY_OF_WEEK) == 1) { + Week += "天"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 2) { + Week += "一"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 3) { + Week += "二"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 4) { + Week += "三"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 5) { + Week += "四"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 6) { + Week += "五"; + } + if (c.get(Calendar.DAY_OF_WEEK) == 7) { + Week += "六"; + } + + + + return "星期" + Week; + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/utils/TimeUtil.java b/app/src/main/java/com/ydd/sportfaceid/utils/TimeUtil.java new file mode 100644 index 0000000..cd92376 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/utils/TimeUtil.java @@ -0,0 +1,23 @@ +package com.ydd.sportfaceid.utils; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + *

Copyright © 2017 Zego. All rights reserved.

+ * + * @author realuei on 24/10/2017. + */ + +public class TimeUtil { + static final private SimpleDateFormat sFormat = new SimpleDateFormat("yyMMddHHmmssSSS"); + static final private SimpleDateFormat sLogFormat = new SimpleDateFormat("MM-dd HH:mm:ss.SSS"); + + static public String getNowTimeStr() { + return sFormat.format(new Date()); + } + + static public String getLogStr() { + return sLogFormat.format(new Date()); + } +} diff --git a/app/src/main/java/com/ydd/sportfaceid/view/SDGustInfoView.java b/app/src/main/java/com/ydd/sportfaceid/view/SDGustInfoView.java new file mode 100644 index 0000000..86a3059 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/view/SDGustInfoView.java @@ -0,0 +1,140 @@ +package com.ydd.sportfaceid.view; + +import android.content.Context; +import android.graphics.Bitmap; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + + +import com.ydd.sportfaceid.R; +import com.ydd.sportfaceid.utils.TimeUntil; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Timer; +import java.util.TimerTask; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; +import rx.Observable; +import rx.Subscriber; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * Created by sandershan on 2018/12/4. + */ + +public class SDGustInfoView extends RelativeLayout { + + public Context mContext; + + public static String mMemberName =""; + + @BindView(R.id.app_logo_imageview) + ImageView app_logo_imageview; + + @BindView(R.id.time_label) + TextView time_label; + @BindView(R.id.date_label) + TextView date_label; + + @BindView(R.id.app_member_name_label) + TextView app_member_name_label; + + private Timer mTimerOutput; + + public void setLogo(String logo) { + this.logo = logo; + + } + + private String logo; + + public void setMemberName(String memberName) { + this.app_member_name_label.setText(memberName); + } + + + + public SDGustInfoView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.mContext = context; + LayoutInflater.from(context).inflate(R.layout.layout_guest_info_top, this); + ButterKnife.bind(this); + configView(); + sdConfigData(); + startRunUpdateTime(); + + } + + public void configView(){ + + this.app_member_name_label.setText(""); + } + + public void sdConfigData(){ + Date now_date = new Date(); + SimpleDateFormat time_format =new SimpleDateFormat("HH:mm"); + String time_string = time_format.format(now_date); + time_label.setText(time_string); + SimpleDateFormat date_format =new SimpleDateFormat("yyyy/MM/dd"); + String date_string = date_format.format(now_date); + String weak_string = TimeUntil.getWeakDay(now_date); + date_label.setText(date_string + " " + weak_string); + } + + public void startRunUpdateTime(){ + mTimerOutput = new Timer(); + mTimerOutput.schedule(new TimerTask() { + @Override + public void run() { //定时器,更新日志 + Observable.create(new Observable.OnSubscribe() { + + @Override + public void call(Subscriber subscriber) { + subscriber.onNext(null); + subscriber.onCompleted(); + } + }).subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber() { + + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(Object o) { + sdConfigData(); + } + }); + } + }, 100, 1000); + } + + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + if (mTimerOutput != null){ + this.mTimerOutput.cancel(); + this.mTimerOutput = null; + } + + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/websocket/FaceWsClient.java b/app/src/main/java/com/ydd/sportfaceid/websocket/FaceWsClient.java new file mode 100644 index 0000000..a1b3f25 --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/websocket/FaceWsClient.java @@ -0,0 +1,93 @@ +package com.ydd.sportfaceid.websocket; + + +import android.util.Log; + +import com.google.gson.Gson; +import com.tencent.bugly.crashreport.CrashReport; +import com.ydd.sportfaceid.StartApplication; +import com.ydd.sportfaceid.config.SDAppConfig; +import com.ydd.sportfaceid.event.FaceidEvent; +import com.ydd.sportfaceid.net.Cmd; +import com.ydd.sportfaceid.net.dto.FaceRecognizeResponse; +import com.ydd.sportfaceid.net.dto.Message; +import com.ydd.sportfaceid.session.ClientTcpSession; +import com.ydd.sportfaceid.utils.DeviceIdUtil; + +import org.greenrobot.eventbus.EventBus; +import org.java_websocket.client.WebSocketClient; +import org.java_websocket.drafts.Draft; +import org.java_websocket.handshake.ServerHandshake; + +import java.net.URI; +import java.util.Map; + + +/** + * face++ WS连接客户端 + * FaceWsClient.java + * + * @author peakren + * @date 2019/4/15 12:51 PM + */ +public class FaceWsClient extends WebSocketClient { + + private final static String TAG = "FaceWsClient"; + private Gson gson = new Gson(); + + public FaceWsClient(URI serverUri, Draft draft) { + super(serverUri, draft); + } + + public FaceWsClient(URI serverURI) { + super(serverURI); + } + + public FaceWsClient(URI serverUri, Map httpHeaders) { + super(serverUri, httpHeaders); + } + + @Override + public void onOpen(ServerHandshake handshakedata) { + Log.i(TAG, "opened connection"); + } + + @Override + public void onMessage(String message) { + Log.i(TAG, "received: " + message); + + FaceRecognizeResponse faceRecognizeResponse = gson.fromJson(message, FaceRecognizeResponse.class); + if (faceRecognizeResponse.getType().equals("unrecognized")){ + Log.d("sander", "这是个陌生人,"); + FaceidEvent faceidEvent = new FaceidEvent(null); + EventBus.getDefault().post(faceidEvent); + }else { + Message sendMsg = new Message(); + sendMsg.setContent(message); + sendMsg.setCmdId(Cmd.FACEID_RESPONSE.id); + // 这里改成1和2,1是1号摄像头,2是2号摄像头 + int current_camera_index = SDAppConfig.getInstance().getCurrent_selected_camera(); + String device_ID = current_camera_index == 0 ? "1" : "2"; + CrashReport.postCatchedException(new Throwable("device_ID = " + device_ID + " message = " + message)); + sendMsg.setDeviceId(device_ID); + ClientTcpSession.getInstance().send(sendMsg); + } + +// FaceidEvent debugFace = new FaceidEvent(null); +// debugFace.isDebug = true; +// debugFace.msg = message; +// EventBus.getDefault().post(debugFace); + + } + + @Override + public void onClose(int code, String reason, boolean remote) { + Log.e(TAG, "Connection closed by " + (remote ? "remote peer" : "us") + " Code: " + code + " Reason: " + reason); + } + + @Override + public void onError(Exception ex) { + ex.printStackTrace(); + } + +} diff --git a/app/src/main/java/com/ydd/sportfaceid/websocket/FaceWsClientService.java b/app/src/main/java/com/ydd/sportfaceid/websocket/FaceWsClientService.java new file mode 100644 index 0000000..045499e --- /dev/null +++ b/app/src/main/java/com/ydd/sportfaceid/websocket/FaceWsClientService.java @@ -0,0 +1,63 @@ +package com.ydd.sportfaceid.websocket; + +import android.text.TextUtils; +import android.util.Log; + +import com.ydd.sportfaceid.BuildConfig; +import com.ydd.sportfaceid.StartApplication; +import com.ydd.sportfaceid.config.SDAppConfig; + +import java.net.URI; +import java.net.URLEncoder; +import java.util.concurrent.TimeUnit; + +public class FaceWsClientService { + + private final static String TAG = "FaceWsClientService"; + + private static FaceWsClientService instance; + + private String local_camer_service ; + FaceWsClient c = null; + public static FaceWsClientService getInstance() { + if (instance == null) { + synchronized (FaceWsClientService.class) { + if (instance == null) { + instance = new FaceWsClientService(); + } + } + } + return instance; + } + + + public void start() { + String rtspUrl = SDAppConfig.getInstance().getCurrentCameraUrl(); + + if (!TextUtils.isEmpty(local_camer_service)){ + if (local_camer_service.equals(rtspUrl)){ + return; + } + } + StartApplication.executor.execute(new Runnable() { + @Override + public void run() { + try { + if (c != null){ + c.closeBlocking(); + c = null; + } + local_camer_service = rtspUrl; +// String rtspUrl = "rtsp://192.168.1.161/user=admin&password=&channel=1&stream=0.sdp?"; + c = new FaceWsClient(new URI(BuildConfig.FACEID_WS_URL + URLEncoder.encode(rtspUrl, "UTF-8"))); + c.connectBlocking(5000, TimeUnit.MILLISECONDS); + } catch (Exception e) { + Log.e(TAG, e.toString()); + } + } + }); + + + } + +} diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c7bd21d --- /dev/null +++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/bg_withe_fillet.xml b/app/src/main/res/drawable/bg_withe_fillet.xml new file mode 100644 index 0000000..376ac81 --- /dev/null +++ b/app/src/main/res/drawable/bg_withe_fillet.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/memberwitebgview.xml b/app/src/main/res/drawable/memberwitebgview.xml new file mode 100644 index 0000000..f44ffcf --- /dev/null +++ b/app/src/main/res/drawable/memberwitebgview.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..cba5cf4 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,363 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sdsetting.xml b/app/src/main/res/layout/activity_sdsetting.xml new file mode 100644 index 0000000..e3fa9e3 --- /dev/null +++ b/app/src/main/res/layout/activity_sdsetting.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_error_layout.xml b/app/src/main/res/layout/dialog_error_layout.xml new file mode 100644 index 0000000..b2d9e59 --- /dev/null +++ b/app/src/main/res/layout/dialog_error_layout.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_guest_info_top.xml b/app/src/main/res/layout/layout_guest_info_top.xml new file mode 100644 index 0000000..9676c9b --- /dev/null +++ b/app/src/main/res/layout/layout_guest_info_top.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/app_img_ico_back.png b/app/src/main/res/mipmap-hdpi/app_img_ico_back.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3123ecca1636296b284c079b03c66261804b6f GIT binary patch literal 1377 zcmaJ>eM}Q)9DZ9yM+8P$9Frm0aa1-GdTnV7cWI%eEu)4qEKMj&W_t9laD)5c?x2M! zX)v;wI0YR{-R4-9Y*E>U=rF^fu#FEFQAlQnxMapZ2yP@Jn{i+??ur!m$Jixz??;~J z`F%aP0~O`3C2o3Y696F5S!#DnYlie1;}p`@nZHyfEvcfzD^{`rF^Kaduo7$y2{~!J zmUNRi(b9N@GyxEkMR~lU*Hwo3Sz3)pFzOJ^No)X2MIjFN*OMYtL)KD^8UEwqWf-Ce zGhAhGXd9t##+~aSp_oD<{R0x?um?S`xA`XS<21dX_W_VQ>llGBo1cp{2 zV!auDl9bm~0ohodgbZq9u3wv10Og}2n~RMr%YgD5BNpYP6UJ#WY%I?SZ9e zJQ2X$_L8+&(#Z_hi6Vy~NH7>w2lLb{UyEo_6h$;TM5oJ@5V=ANBjTZ4M#zjR*h#_9 zQ=CY#3=~nsYuF~y3`?0lDS_tJWf@_uO;W><5Y8c5wI)(h6zFpOKa{4|(SqnEpXU3Y z!h)xTBM~<#uuZ&Q8eAYV5{koYJc)}e?_t@7XcsH$SdkU#SPrt;B3;XeUag`Sf(;7U zs~ndLb25U6Gk(%(H^Y*OnxY7-#9-AF`M!CdOu3q>`p^OKC^cwVyh%^`*aKsMvFTRowGjyrRK<5nV(R9g zZ)V}+zVEl6J0`YIX*Av!6HfFztPJc@BG|Xv-)S5jPz_cOYV5}!v@NA?E&O$O z>HOJ8&A;sZ`_fl#=8XEA&V#2mzh&p)6(cp&QD@1N#|f{b24&Na@9PxG@uOw^vZ*3~ zzmXHZboBzbZ5y~E4?(?G0ij9)KB(FcvbGh*c}XyE1b}<09SI}v#rnErlg>HNyQA6% z0y$ut0z&SBaFw%5cI<1gc}uu`VI?*XBVamfAZUUM!IgFyz$)JwXDK4UDBZg zhx?L8n|CM9cA^~r`P3IP>ErQn#{fPGiVHyLce{6L8 od~GOwc2{_Jo3|XI?C-|7W>-&0l0$YU;qFB literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f5908281d070150700378b64a84c7db1f97aa1 GIT binary patch literal 3056 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 UP(8X^S^xk507*qoM6N<$g3vZS(*OVf literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ff10afd6e182edb2b1a63c8f984e9070d9f950ba GIT binary patch literal 2096 zcmV-02+#M4P)xsEBz6iy~SX+W%nrKL2KH{`gFsDCOB6ZW0@Yj?g&st+$-t|2c4&NM7M5Tk(z5p1+IN@y}=N)4$Vmgo_?Y@Ck5u}3=}@K z);Ns<{X)3-we^O|gm)Oh1^>hg6g=|b7E-r?H6QeeKvv7{-kP9)eb76lZ>I5?WDjiX z7Qu}=I4t9`G435HO)Jpt^;4t zottB%?uUE#zt^RaO&$**I5GbJM-Nj&Z#XT#=iLsG7*JO@)I~kH1#tl@P}J@i#`XX! zEUc>l4^`@w2_Fsoa*|Guk5hF2XJq0TQ{QXsjnJ)~K{EG*sHQW(a<^vuQkM07vtNw= z{=^9J-YI<#TM>DTE6u^^Z5vsVZx{Lxr@$j8f2PsXr^)~M97)OdjJOe81=H#lTbl`!5}35~o;+uSbUHP+6L00V99ox@t5JT2~=-{-Zvti4(UkQKDs{%?4V4AV3L`G476;|CgCH%rI z;0kA=z$nkcwu1-wIX=yE5wwUO)D;dT0m~o7z(f`*<1B>zJhsG0hYGMgQ0h>ylQYP; zbY|ogjI;7_P6BwI^6ZstC}cL&6%I8~cYe1LP)2R}amKG>qavWEwL0HNzwt@3hu-i0 z>tX4$uXNRX_<>h#Q`kvWAs3Y+9)i~VyAb3%4t+;Ej~o)%J#d6}9XXtC10QpHH*X!(vYjmZ zlmm6A=sN)+Lnfb)wzL90u6B=liNgkPm2tWfvU)a0y=N2gqg_uRzguCqXO<0 zp@5n^hzkW&E&~|ZnlPAz)<%Cdh;IgaTGMjVcP{dLFnX>K+DJ zd?m)lN&&u@soMY!B-jeeZNHfQIu7I&9N?AgMkXKxIC+JQibV=}9;p)91_6sP0x=oO zd9T#KhN9M8uO4rCDa ze;J+@sfk?@C6ke`KmkokKLLvbpNHGP^1^^YoBV^rxnXe8nl%NfKS}ea`^9weO&eZ` zo3Nb?%LfcmGM4c%PpK;~v#XWF+!|RaTd$6126a6)WGQPmv0E@fm9;I@#QpU0rcGEJ zNS_DL26^sx!>ccJF}F){`A0VIvLan^$?MI%g|@ebIFlrG&W$4|8=~H%Xsb{gawm(u zEgD&|uQgc{a;4k6J|qjRZzat^hbRSXZwu7(c-+?ku6G1X0c*0%*CyUsXxlKf=%wfS z7A!7+`^?MrPvs?yo31D=ZCu!3UU`+dR^S>@R%-y+!b$RlnflhseNn10MV5M=0KfZ+ zl9DEH0jK5}{VOgmzKClJ7?+=AED&7I=*K$;ONIUM3nyT|P}|NXn@Qhn<7H$I*mKw1 axPAxe%7rDusX+w*00006jj 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⁣ zwiG+x#%j}{0gU~J8;<|!B1@-XaB@{KORFwrYg_8rOv({b0EO#DbeQRm;B6_9=mXGf z-x|VL{zd`)#@yN}HkCSJbjbNlE|zL3Wm9Q8HY`sV)}3%pgN>cL^67{Z;PPL(*wT8N zUjXU{@|*hvm}({wsAC=x0^ok0%UAz0;sogW{B!nDqk|JJ5x~4NfTDgP49^zeu`csl?5mY@JdQdISc zFs!E{^grmkLnUk9 zny~m)1vws@5BFI<-0Tuo2JWX(0v`W|t(wg;s--L47WTvTMz-8l#TL^=OJNRS2?_Qj z3AKT+gvbyBi#H*-tJ%tWD|>EV3wy|8qxfzS!5RW;Jpl5*zo&^UBU=fG#2}UvRyNkK zA06Dy9;K1ca@r2T>yThYgI!ont$(G{6q#2QT+00r_x0(b)gsE`lBB?2gr55gq^D3Fi&p%E(p9>U%bv zkg1Jco(RbyTX7FDHOnl7-O@ zI$AaIl?9NJKPm(WiBP`1-#CB1QzU>&hKm)fpa5DKE{2$X0hGz-0uZ?cyTk(YC!Y&| zL=1VrNERSA5NA2jq7FACfX4JfPyj5XXl1yv0>~s;eF7L2$>&oMqeTFT2m$y7FlkON z_yurD1yIOvA;5C6016pyxBznGUt0kJ&k5r#;&>Jow`r)sp9R~PmK~lz$3xH%LT*1U zJdOyABZ3!FvNoR*vN$5ykHS8f`jA4zV+|L}i1C4`B2c{R0;UdYxaU|H)2avz@ z=mEYc|2S<+(B2Tj+FkX+2D+yFI!k9lWMA61DJ{)e;lum$(;O87?vGJJe!KtK04+N_ zI*P~t@dUb>9Xh{dbyl{-ZQ(UMgz7$|QfL5XSPkskt^NgctYC#;4WcZB1@%@wy@2t3 z2z0DI7&%b$*Aw~abe?GxE`ez@+6hOh-6*8fHRV{1os$EL@}uUZeG4h1&Be`98q*7j z=3-v+lhIjfWVo12!<>%V^a6lTgW3+_#W6n|p*~==zOH7z$0{LSZk(Tpd7EaD04hnA zL;#fxS0aD{`5^&D`}>0Uq?byDD-l2=!wm_bLcUl4gc(% za1p|itVANvFF>hghAS07Im1;IK;|b*W)}VDyI;BIp2=K*yu2a)j?B|f<44NI$NbmJ z#dE0>jI$fMr&@>4kN8MLFb4&2O9fEKaQg%(QO$4_1rVQywG^CmBLh#}_7gKW3vd?| z2?1^&KWq8}8I^_S0|)MowU_pw$q@nl@Nkn$z>BQq_KA^9yaR`(R3u{{Ig;cwt z@AJ^{ODQCm^neroM9nKNUAXi9RCK`OsP_LuR0PUR(YZCCX5dNF6VzcoK&=b^r`W?ltt|*F zpkoae%ZT{C1h~EcFui~b7fF`vb<<~j_VquuUA$}QqIKYELPp#;{u?q8Dz}WAG-(3; zjrm$i%7UbyZMM(Y{>!uJ#vNB?R~B{6Htp=>e*<{fQQ5W7V(1coCWlOON!MzZxhum| ztZBQpGR z;~#ur^&PockKdV{Q6R>o`Pl{0x!DEbpZ7y9Y;*ZvE!*gU`V1W3znva{f=?WO5I&>B z&hw6}tjECtaghm5z|C#%M;Yf_*pI^};h}Vl=^r9EN=tVDj86D;C$jIJ?K7VP+00000NkvXXu0mjf D5i!M* literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..459ca609d3ae0d3943ab44cdc27feef9256dc6d7 GIT binary patch literal 7098 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ico_add.png b/app/src/main/res/mipmap-xhdpi/ico_add.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb0e5924d8da13d224545b49f8f12e186c28444 GIT binary patch literal 3140 zcmaJ@dpMJQA74%*R1SGjG?P;?n_)JVc5;lIX(F@TY}m#&$4W#FQRzgXA`eYbtRYd9 zNXZ+ILx?41d z9Kb!!*@GGvN=4J4);l0pF&L2m6W~!GG0ZR)7ZZbpe%Hl_=BwMrP{?-(FBA*?J1HM0 z7YKpP0U%~Db0aDOX#qi@VF)v{g^8&l!~~8oH-@8)5vE3P1O|@Az!8ui4^$M5Lkq&V z5p90N60NXMI*%8QF*c5lj)p}eVQfyYF#?T78^cYEO-zhL2qSJRi${quVsW*9Di8rK zmBR?(VMGBm8xETZ`Cc}L@%voN zeyjI`OZ$B;=D+0{i;^*3J>35~?4MgA2dz$jSy#09WqyDqay&<5?b62^MAu4MXivm> z#0<<_kO@-;loN)-p3k!Cgg%E|gu+vgb+RFgv@l+ zbnxMwnUeRUlJ3!yrE=3Y8%Uo$6*5+GQjBv3Ul%rqJ;?rOENqK9-+$rN+?)E*vE5x4 zKCgURY+t(Zu|Xk0dtvXni)kd4E(N|CpTQS*ad&Bt&k+`y7xWhT6Us^0RI<}Hxux0 z>!6CJVw!2qZr#oNQg!P`DAx>El=i%@!W#88>stclL$t0cd{VRwk(siU{u**a;#k5G zbwO)tnjg_vW8uj zM;~7L%}9VUnFDFNsM~x@S`p&@FdBOFfI#&U78eF)WWkfS_h>~c1-d@&OJ1MrWK&JL zw*jWCrTbj9sKO}DUShY+XjW~e>%@-Sa=-ke1&pdwT^}m%_1ehcAe+v$b!b_WcRe|x zijU9`cBB1+^~o*Bpbnhgv@*0`PsQrnBLXdiuhpJz5Gb2Z+jgCYgC??67I<%RbNS5 z4CvZH>(s{G#NJhRiCs!Bi|IOHRPiCl%l?_X(}^R--a7XRmJ#&{CCtiQE7;bZJL2T& z6%T7(f+w@=Vg3>K@0)qu8v5(CByTgdj~m>I7hBuI>ObjV88+Od{`P~!=cF6V7gr7| z8PE*(3+Zp$uBJ%zX=wV?+(FMQ)Vfl4{)^t3d-dJA{x@SS%N1`k zlk~2^CZuvnk*}`}9o^rq**|D=<*R$s#)$(hi+4%xtz}bnx>cxr!SK!3xu^9y>@#N% zcGQxEm;Dnf=PuZw!gXtxRmyJ*tJ{Vn%m%FL6BqZGTK*eulcCZ_9!(ut3mA}T>El13iTe2*8f+W3;2j7gL869~=qiL6(}h^IR=#;cr5n`+aGVy(}~G9_*& zUQsD_$b9PKm8HKeAtiga+2HFCNJpeqqRQ4=3=S$#7rS&Ks_}iz8@zL;A3N>5l$&kA zjRmp(F~x>)TkF=Vk}9s&PjJ<_&$>rCLx4H;#Oq^gOqgZyf^z%!nj_tn3-D3<2v$o! za58Je&NPcWb?qrb{`2t4-ioMDrF_ixc&gbPiKVBPIJ!CUdhg|+sdLA@`U_`#z?;!M zS_b(UgUz>sGw;aosv4^WZxYwm8IEeV9j|J7>0p^}MFrcYO)m@S9@Vw`8dv;oPbEk9 zKCj;-8~6u%i+FuqhZs_K`(m;S;S|*XP`h6eMt*hX>Z5eejVpsffLD$*4^T?CH z^F88YM|=y3M#W>Z^W%)zqEr?*eMtWalCT& zKX&(eK|1CFI~z-${4^ZZ?;F2<%f~t|)cfhsiHNB411tB2vy;J>ib7KWelq#PgJRc?LCv{gY zRdCd^utH3Izk5ZdYV1@xSo_(_soG%B|34_mvkk2bJ{a~cJCh_!cHps$?`(_ch%aECw3 z7F%A_*R2s=G(qxCS_8W8p7ENj=8b}E>o$nnr`PE;vjj5&bfas)A5!>XtZm4B)+3z2 zkj;rYLpDD+KI5VonX0^{eOqqJR}a(Aqm06x+1+YVlaLQN2Kqo}yvFDQ=`F!?L4;e| zUk+}aDcTq&hhBdm7X4gXI^1%}`Q814V8_1eMX6N^-!?is`0x^{6ymNmbLPw27tJdL z)w@qA31(DggNMF^E_Q>4ByTN`*mdkXqK>|Smj~@VRC`0JCIZ`x=)UK;odk Xmeh1u?1Jm7|Mm7HXX15yz~TP@-KALx literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ico_app_logo.png b/app/src/main/res/mipmap-xhdpi/ico_app_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bad696a2a542a533532c0b96bf0aea8fbdc9fdeb GIT binary patch literal 9532 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ico_guest.png b/app/src/main/res/mipmap-xhdpi/ico_guest.png new file mode 100644 index 0000000000000000000000000000000000000000..938376ac89fd51e2b5e73bf6036ff3cd933fbd97 GIT binary patch literal 3082 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ico_nex.png b/app/src/main/res/mipmap-xhdpi/ico_nex.png new file mode 100644 index 0000000000000000000000000000000000000000..06e4b80f2ce2ce511a9a44f10520829cd5bb116f GIT binary patch literal 1175 zcmeAS@N?(olHy`uVBq!ia0vp^RX{Ak!3HEvQ(tZcQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?{;ELn2Bde0{8v^K*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-xUqS~&|m@vn0`fKfxe-h0mw@*g}%P{mFDKcRTq~8r6Sym)!^cg z%7Rq=pw#00(xPNw#HA^NtSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu09sGbq%|6*R&# z^HTE5i#5S|e0{Av^NLFn^O93NU2K(rrs!p6rdYW+8k@P9x|$o97&{sox>`Cq8W~%- zy1AMem>8KmyBNUqy5uL9=BDPA!1Sgd^jhH53rY^T1wfl!Qj0RnQd8WD@^cly-nPob z?G{s<=0WwQ;C2hp**N^64|I$^C~}b^8zuxyK_DhP=>j?M#Gjf6Oz}m)q`m2A%vlBo zMs`mZ$B>F!Z*J-G9dZz0eURsv$Z%9HnRN~mqZ})j1t*(#00-Ye&5Ro?I(&`>GK}{o zaox##`eu*kGUMDJ-&(tQsKh@acZ>m|PP+r9drbA~drEmGQp6uqC=iS9mn@no0! zp{QziYuCOB%x~rw%(x(#6hAvjILhoB^II0nopC-=_-oUw*W%dOx z5Ow>(-`&RrQ^mQTY8U}fi7AzZCsS=07?{;ELn2Bde0{8v^K*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-xUqS~&|m@vn0`fKfxe-h0mw@*g}%P{mFDKcRTq~8r6Sym)!^cg z%7Rq=pw#00(xPNw#HA^NtSYc_E=o--$uA1Y&(DE{Vn9ZINq%ugeu09sGbq%|6*R&# z^HTE5i#5S|e0{Av^NLFn^O93NU2K(rrs!p6rdYWenOT^ayO|r97&{sox>{OTxLP=y zxtN=|TAG>~x|+lEy5uL9=BDPA!1Sgd^jhH53rY^T1wfl!Qj0RnQd8WD@^cly-nPob z?G{s<=0WwQ;C71{PQCg-$LND17b&t~LckORV#1RykONQrsd>N@Uj$6r%)0ia3=E71 zJzX3_DsHWrcGmBZgTV3Sx(o6Xl0G~*Sn(-okvQ+M75WeEPJaKu`9bgxCY5=e?3{5v zU#>8zHcT+9Vfo1wl68COyJ<;I4Q03As{DVGR{rVqo8u{M%sJa?io4oPu31iFc*v9Z zbfesk!*8sgI~7Mn3-ta?T3TU#X~lvEn=Yv&bwB(eys5QTFdsfY_=7LR>9(n4QZPtU!1BrxN23?B8^7*8^U+8wl0WU-~Q{l z^uf7)?5nP3y;u{&t)}l^$I!jD;rCy=DW_A_cPlYZ7ExV!iYu0>-%VLVglnQhr={qV zg!4>Wzp}blzcDr4X{O zyx-g8M?C^28*9}wdQ^a1u}P&k?%P|{*iBMAILO_vn4!(s@PKuGx5R7uGL2{{nNn0QFzBT0}D z7(ON>!_f;M%<*xS6IebP;&_o0M2-i|k0#L^y($*uiDoRaOVc%sZINX?&ttp@gPb{* z7X*Rj!fZGkB8ZT?Xkpb4S?*9vL58m87&bPL1p-C2f);R^CQkQLFzvRi>?PJwugTRr zdm)ZHIRe4HnjIJD;ytj9h+rGKFx4c&KZhhYE*HXhfC(0imm1*D(iSP^JNx7DaqxorzA<=bX3;5p{9 K)AIVo^6fvo*hEtR literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ico_user.png b/app/src/main/res/mipmap-xhdpi/ico_user.png new file mode 100644 index 0000000000000000000000000000000000000000..b47557c4ba97a69868f41d0f577d2f0fab3bd88f GIT binary patch literal 1500 zcmaJ>ZA=q)9KM3o3au$JD;P1iVmV@;Y1$8vs($ye^Ba6sJKeUSfADq2IpkgFri` zgz{ttvB9Om342C0g=bf1nQhgjHU$QyrGhD5lo4>?v<37!%A9W0tAti`QDz^!h9PhT zLYFF`7fIzCjG%_3a8M>n650@{986Y-5ScR=`N2P>i5r1u90s)dymt zQCKl*(x$J*VopkkplKHh!yb=EK4 zqwFr)PCCJ$qQy#9&`OBO^hF5{*Sf6Jz1k+GVX)WYf)SB8SkfBMVEBKi!?BKb(u3d+U|t~f3j%7tnu+(MI-nIy~Bx@aUwnsgJS3)EdX0;{Xa#_fOubfZ_TIH({h`Yf^qtKni)x1B zzo6O=G%o`Fv3hSB|BBT-Q5)G3b6U<#+GJ9yX8fvMK!KTiZ91he;u!nAg&fs5$3MdT zyuMF04*0)PeXwlH2V^x#{Jl~m`w^==d}LevYp06$MQ;t!8^7VF0ypjpGGeVhQP<|h zNq$@+ahui6Y8Lha{&XKm`RX5Vjnddw-;?%Skc-vxc)~7LfiFuF5l{=dejE+SZ3>&P z69b;6u(t?ez%3xy*}9gh**SQq?W4aNCA!@9Pt`|Sx3mSyo5I?5yb8ION}(Jh8_F~_8w8fccK1!zQI>6J=&Qn1wy#M0@17p)OAb*|F?Qw LmiFrdMGgM|=sXxx literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca12fe024be86e868d14e91120a6902f8e88ac6 GIT binary patch literal 6464 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 B0*L?s literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8e19b410a1b15ff180f3dacac19395fe3046cdec GIT binary patch literal 10676 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..4c19a13c239cb67b8a2134ddd5f325db1d2d5bee GIT binary patch literal 15523 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 BIP(Ai literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..4e89f38 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,16 @@ + + + #020515 + #303F9F + #FF4081 + #1A191E + #ffffff + #35374A + #232637 + #E7EAF0 + #999999 + #1A191E + #4c000000 + #F3515C + #f4f4f4 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..b7f1878 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,11 @@ + + sport-faceid + 获取人脸信息中。。。 + 新用户注册 + 设置 + 当前设备为哪个摄像头服务? + 摄像头1 + 摄像头2 + 您好 \n 您尚未注册成为本智能运动场用户 \n请扫描门禁上张贴的场馆二维码进行注册后再试 + 如遇注册用户无法识别请联系场馆管理人员 + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..6d87cc7 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/app/src/test/java/com/ydd/sportfaceid/ExampleUnitTest.java b/app/src/test/java/com/ydd/sportfaceid/ExampleUnitTest.java new file mode 100644 index 0000000..8cd4e47 --- /dev/null +++ b/app/src/test/java/com/ydd/sportfaceid/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.ydd.sportfaceid; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/app/store b/app/store new file mode 100644 index 0000000000000000000000000000000000000000..50d589d0f3ffe26b8b13e3a2dcffef1fe3e04e72 GIT binary patch literal 2193 zcmcK4`8N~_8wc>&DEoxSzLU{q%%FrQ%b47`dbvM;%X8icZp*Xg|PIk!LH{o(oH^V4&l<$O6SoD~2706Hk(uYzE`BH#z`2ZlZ1 z003M-I03Q;7v$#E;08i~FwhYokP84IKt3y;rY}4}RT8(ybi@|yzl_1`rBb&CJ`6oJ z!BVCn25ArR1??o5)`0oBBWk`+5D}+y$W3NTZ`z7vgNwVvW1rJtb|wyEw|`koAq4ho0tx9d(10@Ra;SMC<`&0>idOw`%8z*aI^bI zB^4~yZ@fuUZ%0JmNegcH?vs_fJg@5*x`{Xz{IE4!Je0mE{F4WbxgwK3b-lg0Vz!aI zw{~Iuy_y#;rCc(v+uIC_!%kk3E*hkXx>v?2EB(;7ZcA{jDJ)PDyl8-w?oaq8f$fdw z?>wLQ&yQzp#}wXAW0JQ_H&+WIFz(=J3X}ST<(z}-7(ObyxXJa0eCj8YcNtP;6Firg z4nOjyuLr0YM?)K3se$6_DU)y48TdR&W*|%zO2F_`QJqd+TOw&nf%{M+X2+RH+a*@z zK6B>{+7snBr*_l({_!S7?hA`XiO|m!HBBT_s1~HH2TpY~a#5y3ZqPbU*B!u)Z9gvy zxiVKueg8AN#2oV4DWR2hrp2%PsU8&>G3q-xZ}B!hv13alWyoS)dP+aAQ+%rR@)5m1 zU3xp7*y*i+;%0`Sq1E?bl0~@_LiQ>BapvY40?Hc87Uk#eW%p#O8eEQw!(UCkrFYfj z)Dp&Lv{sYh+!M_G>CdODe9g|Q?$d;=y=4cy|KohJ8GY-kHH%yE**9BCv#ap8jeMkl zUcIvFY-f_7QIR8B+w&8h$n) z*38|s%Ve1Zq&%fW5u9CTcHJy{n+y)M#foYPlQQ-s{b;71D(IUc&X4RpPNv(=;3}NE zwV8ES*dE7fp3mAqM`w?+tJ^>mKB79&mEvArDjlzvwlgteOmRskCvB399_u;;sH@|QMz;I#mdvKG zHLdLYGO3x=kl5QOWj+mb>(#t8Q#0dhb^Pb!3kg#oB-0w1%rSf z5aa}WunaE1%>yG@lC}hZKt3)2+(DZk&dUvUgm8<1BRoC-r^CPL&~M`XO?W$K=K-K~sVNkyEIs5I=tjpJU7QXKRx6^#_3pZwP z5|-fBT;aYJO6#QbQRk-DN z(@UrFB3v$$!YUe*LAJ0vzBXqRAAxFJyj6&ZK8J~o;d3f-JQ)OO9Z66cKDHD1VtFc= zXPuJt@KJ_v$E;TSafwC-g4c_fm)+fi#iYuQZN@B-IyebIe`L@3-#c{ny|{G+XIRvy zvJRdpR%+WtDi>8UPx=^P`;EnUI!N676!flHIZVyK=C2dWq-L}O9RvmffX@`*a&Vc0 zi^~W?#2}&-(zS7eN*=YZKgz{Nx}|5wXY{cDy~KkbIaneP;9(}$EyQk1SwlA6zP_Eq zRSi84Z`>alWWzKQ!gUeCnRk*oxdNZBd|T;V0F4RdXV$#7povUmXOQU-NMj855Lj}9qowu*DM*(KxBO#*=`ZaH|b|rq%wM}Mv=iDNePm5Q1}}@!2pOWT5CoA E2fH}d@c;k- literal 0 HcmV?d00001 diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..5333e8c --- /dev/null +++ b/build.gradle @@ -0,0 +1,25 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.1.4' + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/faceid.jks b/faceid.jks new file mode 100644 index 0000000000000000000000000000000000000000..5da7877851aea06dc2e330c89635531ccc13d78a GIT binary patch literal 2210 zcmcJQ=Tp-O8prcXLLebDDTa;|K>>p5Rp*4;znF9NWu!>fY^?z^<0EcA~q0wHBFVzFWNAx_R~+g3cfEX@t3 z_A2YNoo8D}0dNwj^^3864P;T_7#n-2fm>#@cezU1QtkKxTD_$SA6RZR>-<=~!Yr;2 zalLEK)Y>3ZcUOR4cvX3^3%SW;f?|gT^V?8I)N#&_$vG^)>rV1xU$&-*Y4$yO4o=#y zm?Fg^&g!MsQEOhBsKk8rOWKz%k6mYDEQ=Rh`Bu4U>Iln%q37A*g_cQ{FY*3Xt}C){ zSH}(wRNRNNir3mJ&tiw0?l@m?v(S}o(Lg8oBRHovuCSaq4VFtXP8Q8CuZh$jPaatI zD)A1DSPrytDWi%9qT65_C3Dk69t`IPHsr2MO8Ga#YEhrv8#Q<}L}_`Go4}h3PAS7* zB4k354}#6j_+FgiZgSq*j$}WH(s7;~v*un&r*>X8hp=-wQ*OilQmGTH6O`&mok56UxT~aXj4$n-6T_~0^K8@rBf};D5u1fWe&@5` ziJ}y#={DImBNs`n>weqeNR+5o&qC>E^(?|f^>SaA&p0GMmM4m z;~Aba=Q$o~8C1)eogs_pM;i0DU&lG`@De2Pcbn6u!;}=U21}g55koDi+mn3x!U1uH z=k6nyY&j2q`a2e)W1-_aq+ zgBy^P`X6B}X~cr$uk{S?d#W^g88@IyG5QnXe(T`Uk=4e7VU$P@e2>iUlqjRs&*zf; z!_~fpQ$@=%$4cJoEG1Li>5J(V8I0cb)OyPC11a-dpQ$F5Zdrdvh}B2|YuLX1&9?Ny z3QOj&wlzfQTRtDqFN$qtn7g&Rlr>Jy>obaFT#tPXebzu|vWJ%_jYjce8@zZo%%*LF zt?co+16z30ng@SzFO*&??3()%PH)ZpsAzrBIG|?SQ>RT|ve4r*JsB(~K!gR+bCBH! z7_XvOWdp;LJu>XK3-wpT%s}ndjlU)pZB0a(YDk^dYUoFe;Ge$To zgJyLB1I=<)%kZTJHaTQQ1Kr)5!j>b> zyxZDWC&rt7@4TS>7+Q0W)v(@6E9cCkDH762pCLgYYKjlQ4tvhSlnGt zxS-e(Oia&hafiZWp=dN7hmjWQrx3+t zMZ?2L(IN4P7%5?mFe54pi%(1qjY-5H(TIO15VDXIGWowG{yzlyNocjb5*Smo@nI7* z-WZKF_1P<7Y>YO>;QxdF=k7E>^Y7ydy#PW3q=Y5`Aiy*L0A05F*Tdea9PSv=kUCA*O+hL?@kpBor~VJ{)a}n=wBwkte>}pE(mAo_rlNuPF(ZL{|oipt8tQV zUtXo{v=V$`izcNtE!kheb}>BxKle!oI#D`CY7ePHWkv3DUJ3M&MtG}_R@VHK?Bbf?-_Bx;|j8Z`Aipx zj)3DQ(SmomQ`%V|Vb>rZ+T?ImQ8m$YK>u=QNz6V_vhpz6u!5&mZX_B>var@KI?rnF xEY0zIig`Pf{zYC==QnPW$CW;wDmLVZ)u*E6($ivSzNa--giZ9hK#iH9{0n0Q&Y}PS literal 0 HcmV?d00001 diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..743d692 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,13 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx1536m +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..7a3265ee94c0ab25cf079ac8ccdf87f41d455d42 GIT binary patch literal 54708 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

_x$+l{{cH8$W#CT literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..45c8a50 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed Dec 19 11:01:31 CST 2018 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..cccdd3d --- /dev/null +++ b/gradlew @@ -0,0 +1,172 @@ +#!/usr/bin/env sh + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..f955316 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/install_apk.sh b/install_apk.sh new file mode 100644 index 0000000..729c72d --- /dev/null +++ b/install_apk.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +function print_error_then_exit { + echo "***** $1 *****" + exit 1 +} + +echo "Install app-$1-release.apk to device" +adb install -r app/build/outputs/apk/$1/release/app-$1-release.apk || print_error_then_exit "install error" + +echo "Start com.ydd.dm" +adb shell am start -a android.intent.action.MAIN -c android.intent.category.DEFAULT -n com.ydd.sportfaceid/.MainActivity || print_error_then_exit "start error" + +echo "Start finish." diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..e7b4def --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +include ':app'