Przeglądaj źródła

7.2
二维码页面的布局和功能重写

Moon 6 lat temu
rodzic
commit
25bd91fea2
20 zmienionych plików z 851 dodań i 185 usunięć
  1. 2 2
      app/app.iml
  2. 3 0
      app/build.gradle
  3. 70 138
      app/src/main/AndroidManifest.xml
  4. 3 3
      app/src/main/java/com/silence/commonframe/activity/device/activity/NewDeviceFragment.java
  5. 19 9
      app/src/main/java/com/silence/commonframe/activity/device/activity/context_device/NewAddContextDeviceActivity.java
  6. 3 0
      app/src/main/java/com/silence/commonframe/activity/home/Interface/AddDeviceListener.java
  7. 2 3
      app/src/main/java/com/silence/commonframe/activity/home/Interface/CommonScanListener.java
  8. 29 13
      app/src/main/java/com/silence/commonframe/activity/home/activity/AddDeviceCameraActivity.java
  9. 42 8
      app/src/main/java/com/silence/commonframe/activity/home/activity/AdddeviceActivity.java
  10. 10 5
      app/src/main/java/com/silence/commonframe/activity/home/activity/CommonScanActivity.java
  11. 154 0
      app/src/main/java/com/silence/commonframe/activity/home/activity/NewCommonScanActivity.java
  12. 30 0
      app/src/main/java/com/silence/commonframe/activity/home/presenter/AddDevicePresenter.java
  13. 3 3
      app/src/main/java/com/silence/commonframe/activity/home/presenter/CommonScanPresenter.java
  14. 3 1
      app/src/main/java/com/silence/commonframe/activity/mine/activity/setup/SetupActivity.java
  15. 2 0
      app/src/main/java/com/silence/commonframe/common/constant/BaseConstants.java
  16. 67 0
      app/src/main/java/com/silence/commonframe/utils/ScanUtil.java
  17. 278 0
      app/src/main/java/com/silence/commonframe/view/ScannerViewfinderView.java
  18. 103 0
      app/src/main/res/layout/activity_common_scan_new.xml
  19. 26 0
      app/src/main/res/layout/barcode_scanner.xml
  20. 2 0
      app/src/main/res/values/colors.xml

+ 2 - 2
app/app.iml

@@ -97,7 +97,6 @@
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javac" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_aapt_derived_proguard_rules" />
-      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/legacy_multidex_main_dex_list" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_assets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/merged_manifests" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
@@ -137,9 +136,9 @@
     <orderEntry type="library" name="Gradle: android.arch.lifecycle:runtime:1.1.1@aar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:support-compat:28.0.0@aar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:cardview-v7:28.0.0@aar" level="project" />
-    <orderEntry type="library" name="Gradle: __local_aars__:D.\Android\Project\Android-zxyun0511\Android-zxyun\app\libs\Core.jar:unspecified@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.github.bumptech.glide:annotations:4.8.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.facebook.fresco:drawee:1.3.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.journeyapps:zxing-android-embedded:3.3.0@aar" level="project" />
     <orderEntry type="library" name="Gradle: com.squareup.okio:okio:1.14.0@jar" level="project" />
     <orderEntry type="library" name="Gradle: __local_aars__:D.\Android\Project\Android-zxyun0511\Android-zxyun\app\libs\LibFunSDK.jar:unspecified@jar" level="project" />
     <orderEntry type="library" name="Gradle: io.reactivex.rxjava2:rxjava:2.1.0@jar" level="project" />
@@ -185,6 +184,7 @@
     <orderEntry type="library" name="Gradle: com.contrarywind:wheelview:4.0.8@aar" level="project" />
     <orderEntry type="library" name="Gradle: android.arch.core:common:1.1.1@jar" level="project" />
     <orderEntry type="library" name="Gradle: com.android.support:versionedparcelable:28.0.0@aar" level="project" />
+    <orderEntry type="library" name="Gradle: com.google.zxing:core:3.2.1@jar" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
     <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
     <orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" />

+ 3 - 0
app/build.gradle

@@ -150,4 +150,7 @@ dependencies {
 
     implementation project(':nicevideoplayer')
     implementation files('libs/commons-lang3-3.1.jar')
+
+    //zxing扫一扫
+    implementation 'com.journeyapps:zxing-android-embedded:3.3.0'
 }

+ 70 - 138
app/src/main/AndroidManifest.xml

@@ -4,9 +4,7 @@
     package="com.silence.commonframe">
 
     <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
-    <uses-permission android:name="android.permission.INTERNET" />
-
-    <!-- 二维码相关权限 -->
+    <uses-permission android:name="android.permission.INTERNET" /> <!-- 二维码相关权限 -->
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.CAMERA" />
 
@@ -19,34 +17,28 @@
     <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
-    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
-    <!-- 高德地图权限 -->
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 高德地图权限 -->
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
-    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
-    <!-- 极光推送权限 -->
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- 极光推送权限 -->
     <!-- Required -->
     <permission
         android:name="com.silence.commonframe.permission.JPUSH_MESSAGE"
-        android:protectionLevel="signature" />
-    <!-- Required -->
+        android:protectionLevel="signature" /> <!-- Required -->
     <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
-    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
-    <!-- Optional. Required for location feature -->
+    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- Optional. Required for location feature -->
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在 6.0 系统上的层叠窗口权限 -->
     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
-    <uses-permission android:name="android.permission.GET_TASKS" />
-    <!-- 图片选择器的权限 -->
+    <uses-permission android:name="android.permission.GET_TASKS" /> <!-- 图片选择器的权限 -->
     <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
-    <uses-permission android:name="android.permission.RECORD_AUDIO" />
-    <!-- 系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上 -->
+    <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上 -->
     <uses-permission android:name="android.permission.RESTART_PACKAGES" />
     <uses-permission android:name="android.permission.RECORD_VIDEO" />
     <uses-permission android:name="android.permission.READ_LOGS" />
@@ -54,18 +46,18 @@
 
     <application
         android:name=".App"
+        android:allowBackup="true"
         android:icon="@mipmap/logo1"
         android:label="@string/app_name"
         android:supportsRtl="true"
-        android:allowBackup="true"
         android:theme="@style/Theme.AppCompat.Light.NoActionBar"
         tools:replace="android:icon,android:theme,android:name">
+        <activity android:name=".activity.home.activity.NewCommonScanActivity"></activity>
+
         <meta-data
             android:name="com.amap.api.v2.apikey"
-            android:value="1ba9dcc5bd319c23c770640ae4eacc0b" />
-        <!-- android:value="4abbaf9cb40a64046f30ccf9970a7f26" /> -->
+            android:value="1ba9dcc5bd319c23c770640ae4eacc0b" /> <!-- android:value="4abbaf9cb40a64046f30ccf9970a7f26" /> -->
         <!-- android:value="70d24ce161a21cb552b195b743058b3a" /> -->
-
         <!-- <activity android:name=".activity.MainActivity">   .activity.WelcomeActivity" -->
         <activity
             android:name=".activity.login.WelcomeActivity"
@@ -75,143 +67,106 @@
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
-        </activity>
-        <!-- 雄迈摄像头相关界面 -->
+        </activity> <!-- 雄迈摄像头相关界面 -->
         <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceSetupStorage" />
         <activity android:name=".example.ActivityGuideDeviceList" />
         <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceSystemInfo" />
-        <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceListLan" />
-        <!-- com.silence.hshzl.example.ActivityGuideDeviceList -->
-
+        <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceListLan" /> <!-- com.silence.hshzl.example.ActivityGuideDeviceList -->
         <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceCamera" />
-        <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceWifiConfig" />
-        <!-- <activity android:name="com.silence.hshzl.example.ActivityGuideDeviceList"></activity> -->
-
-
+        <activity android:name=".activity.device.activity.camera.ActivityGuideDeviceWifiConfig" /> <!-- <activity android:name="com.silence.hshzl.example.ActivityGuideDeviceList"></activity> -->
         <!-- 微信接受请求或返回值的Activity -->
         <activity
             android:name=".wxapi.WXEntryActivity"
             android:exported="true"
             android:launchMode="singleTask"
             android:taskAffinity="com.silence.commonframe"
-            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
-        <!-- 登录 -->
+            android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <!-- 登录 -->
         <activity
             android:name=".activity.login.LoginActivity"
             android:launchMode="singleTask"
-            android:screenOrientation="portrait" />
-        <!-- android:launchMode="singleTask" -->
+            android:screenOrientation="portrait" /> <!-- android:launchMode="singleTask" -->
         <!-- 主页 -->
         <activity
             android:name=".activity.MainActivity"
             android:launchMode="singleTask"
-            android:screenOrientation="portrait" />
-        <!-- 注册 -->
+            android:screenOrientation="portrait" /> <!-- 注册 -->
         <activity
             android:name=".activity.login.NewRegisterActivity"
-            android:screenOrientation="portrait" />
-        <!-- 忘记密码 -->
+            android:screenOrientation="portrait" /> <!-- 忘记密码 -->
         <activity
             android:name=".activity.login.NewForgetPasswordActivity"
-            android:screenOrientation="portrait" />
-        <!-- 添加设备设备列表 -->
+            android:screenOrientation="portrait" /> <!-- 添加设备设备列表 -->
         <activity
             android:name=".activity.home.activity.AdddeviceActivity"
-            android:screenOrientation="portrait" />
-        <!-- 扫一扫 -->
+            android:screenOrientation="portrait" /> <!-- 扫一扫 -->
         <activity
             android:name=".activity.home.activity.CommonScanActivity"
-            android:screenOrientation="portrait" />
-        <!-- 扫一扫(关联) -->
+            android:screenOrientation="portrait" /> <!-- 扫一扫(关联) -->
         <activity
             android:name=".activity.device.activity.context_device.CommonScanDCActivity"
-            android:screenOrientation="portrait" />
-        <!-- 图片浏览 -->
-        <activity android:name=".utils.image.ImageBrowseActivity" />
-        <!-- 添加场景 -->
-        <activity android:name=".activity.home.activity.NewAddSiteActivity"/>
-        <!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
-        <service android:name="com.amap.api.location.APSService" />
-
-        <!-- 场所详情 -->
+            android:screenOrientation="portrait" /> <!-- 图片浏览 -->
+        <activity android:name=".utils.image.ImageBrowseActivity" /> <!-- 添加场景 -->
+        <activity android:name=".activity.home.activity.NewAddSiteActivity" /> <!-- 定位需要的服务 使用2.0的定位需要加上这个 -->
+        <service android:name="com.amap.api.location.APSService" /> <!-- 场所详情 -->
         <activity
             android:name=".activity.mine.activity.SiteManagementActivity"
-            android:screenOrientation="portrait" />
-        <!-- 新设备详情 -->
-        <activity android:name=".activity.device.activity.NewDeviceDetailActivity"
-            android:screenOrientation="portrait"/>
-        <!-- <meta-data -->
+            android:screenOrientation="portrait" /> <!-- 新设备详情 -->
+        <activity
+            android:name=".activity.device.activity.NewDeviceDetailActivity"
+            android:screenOrientation="portrait" /> <!-- <meta-data -->
         <!-- android:name="com.google.android.actions" -->
         <!-- android:resource="@xml/buttonstyle" /> -->
         <!-- 场所列表 -->
-        <activity android:name=".activity.mine.activity.NewSiteDetailActivity"/>
-        <!-- 添加设备 -->
+        <activity android:name=".activity.mine.activity.NewSiteDetailActivity" /> <!-- 添加设备 -->
         <activity
             android:name=".activity.home.activity.AdddevicedetailActivity"
-            android:screenOrientation="portrait" />
-        <!-- 联系人界面 -->
+            android:screenOrientation="portrait" /> <!-- 联系人界面 -->
         <activity
             android:name=".activity.mine.activity.AddlinkmanActivity"
-            android:screenOrientation="portrait" />
-        <!-- 复核详情 -->
+            android:screenOrientation="portrait" /> <!-- 复核详情 -->
         <activity
             android:name=".activity.message.activity.NewsdetailActivity"
-            android:screenOrientation="portrait" />
-        <!-- 消息搜索界面 -->
+            android:screenOrientation="portrait" /> <!-- 消息搜索界面 -->
         <activity
             android:name=".activity.message.activity.SearchMessageActivity"
-            android:screenOrientation="portrait" />
-        <!-- 主页异常场所设备列表 -->
+            android:screenOrientation="portrait" /> <!-- 主页异常场所设备列表 -->
         <activity
             android:name=".activity.home.activity.DeviceListActivity"
-            android:screenOrientation="portrait" />
-        <!-- 客服电话 -->
+            android:screenOrientation="portrait" /> <!-- 客服电话 -->
         <activity
             android:name=".activity.mine.activity.CoustomerActivity"
             android:launchMode="singleTop"
-            android:screenOrientation="portrait" />
-        <!-- 推送管理 -->
+            android:screenOrientation="portrait" /> <!-- 推送管理 -->
         <activity
             android:name=".activity.mine.activity.setup.FireMessageActivity"
-            android:screenOrientation="portrait" />
-        <!-- 火警通知 -->
+            android:screenOrientation="portrait" /> <!-- 火警通知 -->
         <activity
             android:name=".activity.mine.activity.HistoryActivity"
             android:launchMode="singleTop"
-            android:screenOrientation="portrait" />
-        <!-- 常见问题 -->
+            android:screenOrientation="portrait" /> <!-- 常见问题 -->
         <activity
             android:name=".activity.mine.activity.QuesstionActivity"
-            android:launchMode="singleTop" />
-        <!-- 复核 -->
+            android:launchMode="singleTop" /> <!-- 复核 -->
         <activity
             android:name=".activity.message.activity.CheckActivity"
-            android:screenOrientation="portrait" />
-        <!-- 选择地址页 -->
-        <activity android:name=".activity.home.activity.MapSearchActivity"/>
-        <!-- 设置界面 -->
+            android:screenOrientation="portrait" /> <!-- 选择地址页 -->
+        <activity android:name=".activity.home.activity.MapSearchActivity" /> <!-- 设置界面 -->
         <activity
             android:name=".activity.mine.activity.setup.SetupActivity"
             android:launchMode="singleTask"
-            android:screenOrientation="portrait" />
-        <!-- 关于我们 -->
+            android:screenOrientation="portrait" /> <!-- 关于我们 -->
         <activity
             android:name=".activity.mine.activity.setup.AboutActivity"
-            android:screenOrientation="portrait" />
-        <!-- 信息上报 -->
-        <activity android:name=".activity.message.activity.NewSubmitActivity"
-            android:screenOrientation="portrait"/>
-        <!-- 火警报警弹窗 -->
+            android:screenOrientation="portrait" /> <!-- 信息上报 -->
+        <activity
+            android:name=".activity.message.activity.NewSubmitActivity"
+            android:screenOrientation="portrait" /> <!-- 火警报警弹窗 -->
         <activity
             android:name=".activity.FireAlarmActivity"
-            android:theme="@style/Theme.Transparent" />
-        <!-- 运行记录 -->
+            android:theme="@style/Theme.Transparent" /> <!-- 运行记录 -->
         <activity
             android:name=".activity.device.activity.context_device.RunningRecordActivity"
-            android:screenOrientation="portrait" />
-        <!-- android:theme="@style/Theme.Transparent" -->
-
-
+            android:screenOrientation="portrait" /> <!-- android:theme="@style/Theme.Transparent" -->
         <!-- 极光推送 -->
         <service
             android:name="cn.jpush.android.service.PushService"
@@ -241,10 +196,7 @@
                 <action android:name="cn.jpush.android.intent.CONNECTION" /> <!-- 接收网络变化 连接/断开 since 1.6.3 -->
                 <category android:name="com.silence.commonframe" />
             </intent-filter>
-        </receiver>
-
-        <!-- 图片选择 -->
-
+        </receiver> <!-- 图片选择 -->
         <provider
             android:name="android.support.v4.content.FileProvider"
             android:authorities="com.silence.commonframe.fileprovider"
@@ -253,48 +205,36 @@
             <meta-data
                 android:name="android.support.FILE_PROVIDER_PATHS"
                 android:resource="@xml/file_paths" />
-        </provider>
-
-        <!-- 用户协议 -->
+        </provider> <!-- 用户协议 -->
         <activity
             android:name=".activity.mine.activity.setup.UserAgreementActivity"
-            android:screenOrientation="portrait" />
-        <!-- 隐私政策 -->
+            android:screenOrientation="portrait" /> <!-- 隐私政策 -->
         <activity
             android:name=".activity.mine.activity.setup.PrivacyPolicyActivity"
-            android:screenOrientation="portrait" />
-        <!-- 新设备关联管理 -->
+            android:screenOrientation="portrait" /> <!-- 新设备关联管理 -->
         <activity
             android:name=".activity.device.activity.context_device.NewContextManagementActivity"
-            android:screenOrientation="portrait" />
-        <!-- 新添加关联设备 -->
+            android:screenOrientation="portrait" /> <!-- 新添加关联设备 -->
         <activity
             android:name=".activity.device.activity.context_device.NewAddContextDeviceActivity"
-            android:screenOrientation="portrait" />
-        <!-- 摄像头设置界面 -->
+            android:screenOrientation="portrait" /> <!-- 摄像头设置界面 -->
         <activity
             android:name=".activity.device.activity.camera.CameraSetupActivity"
-            android:screenOrientation="portrait" />
-        <!-- 摄像头基本设置 -->
+            android:screenOrientation="portrait" /> <!-- 摄像头基本设置 -->
         <activity
             android:name=".activity.device.activity.camera.CameraBasicsettingActivity"
-            android:screenOrientation="portrait" />
-        <!-- 添加设备(摄像头) -->
+            android:screenOrientation="portrait" /> <!-- 添加设备(摄像头) -->
         <activity
             android:name=".activity.home.activity.AddDeviceCameraActivity"
-            android:screenOrientation="portrait" />
-
-        <!-- 微信绑定手机界面 -->
+            android:screenOrientation="portrait" /> <!-- 微信绑定手机界面 -->
         <!-- 微信公众号推送 -->
         <activity
             android:name=".activity.mine.activity.setup.WXPublicCodeActivity"
-            android:theme="@style/Theme.Transparent"
-            />
-        <!-- 复核详情 -->
-        <activity android:name=".activity.message.activity.NewsdetailActivityShow"
+            android:theme="@style/Theme.Transparent" /> <!-- 复核详情 -->
+        <activity
+            android:name=".activity.message.activity.NewsdetailActivityShow"
             android:configChanges="orientation|screenSize|keyboardHidden"
-            android:screenOrientation="portrait"/>
-        <!-- 企业版登录 -->
+            android:screenOrientation="portrait" /> <!-- 企业版登录 -->
         <activity
             android:name=".activity.login.LoginCompanyActivity"
             android:screenOrientation="portrait" />
@@ -304,36 +244,28 @@
             android:screenOrientation="portrait" />
         <activity
             android:name="com.yalantis.ucrop.UCropActivity"
-            android:screenOrientation="portrait" />
-        <!-- 空气卫士主界面 -->
+            android:screenOrientation="portrait" /> <!-- 空气卫士主界面 -->
         <activity
             android:name=".activity.device.activity.airguard.AirGuardActivity"
-            android:screenOrientation="portrait" />
-        <!-- 空气卫士工作时间段界面 -->
+            android:screenOrientation="portrait" /> <!-- 空气卫士工作时间段界面 -->
         <activity
             android:name=".activity.device.activity.airguard.AirGuardWordTimeActivity"
-            android:screenOrientation="portrait" />
-        <!-- 空气卫士添加时间段界面 -->
+            android:screenOrientation="portrait" /> <!-- 空气卫士添加时间段界面 -->
         <activity
             android:name=".activity.device.activity.airguard.AirGuardNewTimeActivity"
-            android:screenOrientation="portrait" />
-        <!-- 空气卫士同步实时时间界面 -->
+            android:screenOrientation="portrait" /> <!-- 空气卫士同步实时时间界面 -->
         <activity
             android:name=".activity.device.activity.airguard.AirGuardTimeClockActivity"
-            android:screenOrientation="portrait" />
-        <!-- 空气卫士详情界面 -->
+            android:screenOrientation="portrait" /> <!-- 空气卫士详情界面 -->
         <activity
             android:name=".activity.device.activity.airguard.AirGuardDetailActivity"
-            android:screenOrientation="portrait" />
-
-        <!-- 企业版主界面 -->
+            android:screenOrientation="portrait" /> <!-- 企业版主界面 -->
         <activity
             android:name="com.silence.tech.ui.MainCompanyActivity"
+            android:screenOrientation="portrait" /> <!-- 企业版监控异常界面 -->
+        <activity
+            android:name="com.silence.tech.ui.moni.activity.MoniTroubleActivity"
             android:screenOrientation="portrait" />
-        <!-- 企业版监控异常界面 -->
-        <activity android:name="com.silence.tech.ui.moni.activity.MoniTroubleActivity"
-            android:screenOrientation="portrait"
-            ></activity>
     </application>
 
 </manifest>

+ 3 - 3
app/src/main/java/com/silence/commonframe/activity/device/activity/NewDeviceFragment.java

@@ -19,7 +19,6 @@ import com.silence.commonframe.Dialog.BaseDialog;
 import com.silence.commonframe.R;
 import com.silence.commonframe.activity.MainActivity;
 import com.silence.commonframe.activity.device.activity.airguard.AirGuardActivity;
-import com.silence.commonframe.activity.home.activity.CommonScanActivity;
 import com.silence.commonframe.adapter.device.DeviceListAdapter;
 import com.silence.commonframe.adapter.device.DeviceTitleAdapter;
 import com.silence.commonframe.adapter.device.PlaceListAdapter;
@@ -241,12 +240,13 @@ public class NewDeviceFragment extends BaseFragment implements NewDeviceListener
             }
         });
 
+        btnAddDevice.setVisibility(View.GONE);
         btnAddDevice.setOnClickListener(v -> {
             avoidDoubleClick(v);
             if (listDeviceTypeTitle.get(0).getIsClick()){  //设备标题为烟感
-                startActivity(new Intent().putExtra("deviceType",getResources().getString(R.string.device_smokedetector)).setClass(getContext(),CommonScanActivity.class));
+//                startActivity(new Intent().putExtra("deviceType",getResources().getString(R.string.device_smokedetector)).setClass(getContext(),CommonScanActivity.class));
             }else if (listDeviceTypeTitle.get(1).getIsClick()){ //设备标题为摄像头
-                startActivity(new Intent().putExtra("deviceType",getResources().getString(R.string.device_camera)).setClass(getContext(),CommonScanActivity.class));
+//                startActivity(new Intent().putExtra("deviceType",getResources().getString(R.string.device_camera)).setClass(getContext(),CommonScanActivity.class));
             }else if (listDeviceTypeTitle.get(2).getIsClick()){ //设备标题为空气卫士
 
             }

+ 19 - 9
app/src/main/java/com/silence/commonframe/activity/device/activity/context_device/NewAddContextDeviceActivity.java

@@ -13,6 +13,8 @@ import android.widget.TextView;
 import android.widget.Toast;
 
 import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.google.zxing.integration.android.IntentIntegrator;
+import com.google.zxing.integration.android.IntentResult;
 import com.silence.commonframe.R;
 import com.silence.commonframe.activity.device.activity.context_device.Interface.NewAddContextDeviceListener;
 import com.silence.commonframe.activity.device.activity.context_device.presenter.NewAddContextDevicePresenter;
@@ -20,6 +22,7 @@ import com.silence.commonframe.adapter.device.SpinnerAdapter;
 import com.silence.commonframe.base.basemvp.BaseActivity;
 import com.silence.commonframe.base.basemvp.TitleBar;
 import com.silence.commonframe.bean.DeviceTypeBean;
+import com.silence.commonframe.utils.ScanUtil;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -99,7 +102,7 @@ public class NewAddContextDeviceActivity extends BaseActivity implements NewAddC
                 break;
             case R.id.iv_qr_code:
                 //跳转到扫一扫页面
-                startActivityForResult(new Intent(this, CommonScanDCActivity.class),2);
+                new ScanUtil().goScan(new IntentIntegrator(NewAddContextDeviceActivity.this));
                 break;
             case R.id.tv_device_type:
                 if (isShow){
@@ -176,16 +179,23 @@ public class NewAddContextDeviceActivity extends BaseActivity implements NewAddC
 
     @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        if (resultCode == 2 && requestCode == 2){
-            if (data != null) {
-                String id = data.getStringExtra("id");
-                if (id!=null&&!"".equals(id)){
-                    deviceId2 = id;
-                    etCode.setText(deviceId2);
-//                    presenter.chickDevice();
+        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode,resultCode,data);
+        if (intentResult != null){
+            if (intentResult.getContents() != null){
+                //扫描结果
+                String scanResult = intentResult.getContents();
+                deviceId2 = scanResult;
+                etCode.setText(scanResult);
+            }else if (data != null){
+                if (resultCode == 33){
+                    //手动输入
+                    String scanResult = data.getStringExtra("deviceNo");
+                    deviceId2 = scanResult;
+                    etCode.setText(scanResult);
                 }
             }
+        }else {
+            super.onActivityResult(requestCode, resultCode, data);
         }
     }
 }

+ 3 - 0
app/src/main/java/com/silence/commonframe/activity/home/Interface/AddDeviceListener.java

@@ -10,9 +10,12 @@ public interface AddDeviceListener {
     interface View {
 
         void onSuccess(List<DeviceTypeModel.ObjectBean> data);
+        void onCheckSuccess(String deviceId);
+        void onError();
         void onFile(String msg);
     }
     abstract class Presenter extends BasePresenter<View, BaseModel>{
         public abstract void getDeviceType();
+        public abstract void checkDeviceId(String deviceId);
     }
 }

+ 2 - 3
app/src/main/java/com/silence/commonframe/activity/home/Interface/CommonScanListener.java

@@ -5,13 +5,12 @@ import com.silence.commonframe.base.basemvp.BasePresenter;
 
 public interface CommonScanListener {
     interface View{
-        String getDeviceId();
 
-        void onSuccess();
+        void onSuccess(String deviceId);
         void onError();
         void onFile(String msg);
     }
     abstract class Presenter extends BasePresenter<View, BaseModel>{
-        public abstract void checkDeviceId();
+        public abstract void checkDeviceId(String deviceId);
     }
 }

+ 29 - 13
app/src/main/java/com/silence/commonframe/activity/home/activity/AddDeviceCameraActivity.java

@@ -3,12 +3,15 @@ package com.silence.commonframe.activity.home.activity;
 import android.annotation.SuppressLint;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.EditText;
 import android.widget.Toast;
 
+import com.google.zxing.integration.android.IntentIntegrator;
+import com.google.zxing.integration.android.IntentResult;
 import com.silence.commonframe.Dialog.CDialog;
 import com.silence.commonframe.R;
 import com.silence.commonframe.activity.device.activity.camera.ActivityGuideDeviceListLan;
@@ -16,7 +19,7 @@ import com.silence.commonframe.activity.device.activity.camera.ActivityGuideDevi
 import com.silence.commonframe.activity.home.Interface.CommonScanListener;
 import com.silence.commonframe.activity.home.presenter.CommonScanPresenter;
 import com.silence.commonframe.base.basemvp.BaseActivity;
-import com.silence.commonframe.zxing.utils.Constant;
+import com.silence.commonframe.utils.ScanUtil;
 
 /**
  * 添加设备(摄像头)界面
@@ -46,11 +49,30 @@ public class AddDeviceCameraActivity extends BaseActivity implements CommonScanL
      *  扫码添加设备
      */
     public void click_SCan(View view){
-        Intent intent = new Intent(AddDeviceCameraActivity.this, CommonScanActivity.class);
-        intent.putExtra("deviceType",getResources().getString(R.string.device_camera));
-        intent.putExtra(Constant.REQUEST_SCAN_MODE,Constant.REQUEST_SCAN_MODE_QRCODE_MODE);
-        startActivity(intent);
+        //去扫描
+        new ScanUtil().goScan(new IntentIntegrator(AddDeviceCameraActivity.this));
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode,resultCode,data);
+        if (intentResult != null){
+            if (intentResult.getContents() != null){
+                //扫描结果
+                String scanResult = intentResult.getContents();
+                presenter.checkDeviceId(scanResult);
+            }else if (data != null){
+                if (resultCode == 33){
+                    //手动输入
+                    String scanResult = data.getStringExtra("deviceNo");
+                    presenter.checkDeviceId(scanResult);
+                }
+            }
+        }else {
+            super.onActivityResult(requestCode, resultCode, data);
+        }
     }
+
     /**
      * 输入设备号添加设备
      */
@@ -69,7 +91,7 @@ public class AddDeviceCameraActivity extends BaseActivity implements CommonScanL
                 if (TextUtils.isEmpty(deviceId)){
                     Toast.makeText(AddDeviceCameraActivity.this,"设备编号为空,请输入设备号!",Toast.LENGTH_SHORT).show();
                 }else {
-                    presenter.checkDeviceId();
+                    presenter.checkDeviceId(deviceId);
                 }
             }
         });
@@ -99,17 +121,11 @@ public class AddDeviceCameraActivity extends BaseActivity implements CommonScanL
     }
 
     @Override
-    public String getDeviceId() {
-        return deviceId;
-    }
-
-    @Override
-    public void onSuccess() {
+    public void onSuccess(String deviceId) {
         Intent intent = new Intent(this,AdddevicedetailActivity.class);
         intent.putExtra("deviceType",getResources().getString(R.string.device_camera));
         intent.putExtra("id", deviceId);
         startActivity(intent);
-        finish();
     }
 
     @Override

+ 42 - 8
app/src/main/java/com/silence/commonframe/activity/home/activity/AdddeviceActivity.java

@@ -2,12 +2,15 @@ package com.silence.commonframe.activity.home.activity;
 
 import android.Manifest;
 import android.content.Intent;
+import android.support.annotation.Nullable;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.View;
 import android.widget.Toast;
 
 import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.google.zxing.integration.android.IntentIntegrator;
+import com.google.zxing.integration.android.IntentResult;
 import com.mylhyl.acp.Acp;
 import com.mylhyl.acp.AcpListener;
 import com.mylhyl.acp.AcpOptions;
@@ -17,7 +20,7 @@ import com.silence.commonframe.activity.home.presenter.AddDevicePresenter;
 import com.silence.commonframe.adapter.home.AddDeviceAdapter;
 import com.silence.commonframe.base.basemvp.BaseActivity;
 import com.silence.commonframe.model.DeviceTypeModel;
-import com.silence.commonframe.zxing.utils.Constant;
+import com.silence.commonframe.utils.ScanUtil;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -76,19 +79,16 @@ public class AdddeviceActivity extends BaseActivity implements AddDeviceListener
                     public void onGranted() {
                         if (position == 0) {
                             //烟感
-                            Intent intent = new Intent(AdddeviceActivity.this, CommonScanActivity.class);
-                            intent.putExtra(Constant.REQUEST_SCAN_MODE, Constant.REQUEST_SCAN_MODE_QRCODE_MODE);
-                            intent.putExtra("deviceType", getResources().getString(R.string.device_smokedetector));
-                            startActivity(intent);
+                            //去扫描
+                            new ScanUtil().goScan(new IntentIntegrator(AdddeviceActivity.this));
                         } else if (position == 1) {
                             //摄像头
                             Intent intent1 = new Intent(AdddeviceActivity.this, AddDeviceCameraActivity.class);
                             startActivity(intent1);
                         } else if (position == 2) {
                             //其他
-                            Intent intent2 = new Intent(AdddeviceActivity.this, CommonScanActivity.class);
-                            intent2.putExtra(Constant.REQUEST_SCAN_MODE, Constant.REQUEST_SCAN_MODE_QRCODE_MODE);
-                            startActivity(intent2);
+                            //去扫描
+                            new ScanUtil().goScan(new IntentIntegrator(AdddeviceActivity.this));
                         }
                     }
                     @Override
@@ -97,6 +97,27 @@ public class AdddeviceActivity extends BaseActivity implements AddDeviceListener
                     }
                 });
     }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode,resultCode,data);
+        if (intentResult != null){
+            if (intentResult.getContents() != null){
+                //扫描结果
+                String scanResult = intentResult.getContents();
+                presenter.checkDeviceId(scanResult);
+            }else if (data != null){
+                if (resultCode == 33){
+                    //手动输入
+                    String scanResult = data.getStringExtra("deviceNo");
+                    presenter.checkDeviceId(scanResult);
+                }
+            }
+        }else {
+            super.onActivityResult(requestCode, resultCode, data);
+        }
+    }
+
     //获取设备类型:图片和名字
     @Override
     public void onSuccess(List<DeviceTypeModel.ObjectBean> data) {
@@ -113,6 +134,19 @@ public class AdddeviceActivity extends BaseActivity implements AddDeviceListener
     }
 
     @Override
+    public void onCheckSuccess(String deviceId) {
+        Intent intent = new Intent(AdddeviceActivity.this,AdddevicedetailActivity.class);
+        intent.putExtra("deviceType",getResources().getString(R.string.device_smokedetector));
+        intent.putExtra("id", deviceId);
+        startActivity(intent);
+    }
+
+    @Override
+    public void onError() {
+
+    }
+
+    @Override
     public void onFile(String msg) {
         Toast.makeText(this,""+msg,Toast.LENGTH_SHORT).show();
     }

+ 10 - 5
app/src/main/java/com/silence/commonframe/activity/home/activity/CommonScanActivity.java

@@ -1,5 +1,6 @@
-package com.silence.commonframe.activity.home.activity;
 
+package com.silence.commonframe.activity.home.activity;
+/*
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.database.Cursor;
@@ -32,10 +33,12 @@ import com.silence.commonframe.zxing.zxing.decode.Utils;
 
 import butterknife.BindView;
 
+*/
 /**
  * 二维码扫描使用
  *
- */
+ *//*
+
 public final class CommonScanActivity extends BaseActivity implements ScanListener, View.OnClickListener, CommonScanListener.View {
     static final String TAG = CommonScanActivity.class.getSimpleName();
     SurfaceView scanPreview = null;
@@ -113,9 +116,11 @@ public final class CommonScanActivity extends BaseActivity implements ScanListen
         super.onPause();
         scanManager.onPause();
     }
-    /**
+    */
+/**
      *
-     */
+     *//*
+
     public void scanResult(Result rawResult, Bundle bundle) {
         //扫描成功后,扫描器不会再连续扫描,如需连续扫描,调用reScan()方法。
         //scanManager.reScan();
@@ -242,4 +247,4 @@ public final class CommonScanActivity extends BaseActivity implements ScanListen
     public void onFile(String msg) {
         Toast.makeText(this,""+msg,Toast.LENGTH_SHORT).show();
     }
-}
+}*/

+ 154 - 0
app/src/main/java/com/silence/commonframe/activity/home/activity/NewCommonScanActivity.java

@@ -0,0 +1,154 @@
+package com.silence.commonframe.activity.home.activity;
+
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.SurfaceView;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.journeyapps.barcodescanner.CaptureManager;
+import com.journeyapps.barcodescanner.DecoratedBarcodeView;
+import com.silence.commonframe.Dialog.CDialog;
+import com.silence.commonframe.R;
+import com.silence.commonframe.base.basemvp.BaseActivity;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+public class NewCommonScanActivity extends BaseActivity implements DecoratedBarcodeView.TorchListener {
+
+    @BindView(R.id.sv_preview_view)
+    SurfaceView previewView;
+    @BindView(R.id.db_custom)
+    DecoratedBarcodeView dbView;
+    @BindView(R.id.iv_flash_light)
+    ImageView ivFlash;
+    @BindView(R.id.tv_flash_light)
+    TextView tvFlash;
+    @BindView(R.id.ll_flash_light)
+    LinearLayout llFlash;
+    @BindView(R.id.ll_input)
+    LinearLayout llInput;
+    @BindView(R.id.ll_bottom)
+    LinearLayout llBottom;
+
+    private CaptureManager captureManager;
+    private boolean isLightOn = false;
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_common_scan_new;
+    }
+
+    @Override
+    public void initPresenter() {
+
+    }
+
+    @Override
+    public void initView() {
+        clickTitle(this,"二维码/条形码","",true);
+        dbView.setTorchListener(this);
+        //没有闪光灯功能,隐藏闪光灯
+        if (!hasFlash()){
+            llFlash.setVisibility(View.GONE);
+        }
+
+        //初始化
+        captureManager = new CaptureManager(this,dbView);
+        captureManager.initializeFromIntent(getIntent(),getSavedInstanceState());
+        captureManager.decode();
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        captureManager.onDestroy();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        captureManager.onResume();
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        captureManager.onPause();
+    }
+
+    @Override
+    public void onTorchOn() {
+        isLightOn = true;
+    }
+
+    @Override
+    public void onTorchOff() {
+        isLightOn = false;
+    }
+
+    private boolean hasFlash(){
+        return getApplicationContext().getPackageManager()
+                .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
+    }
+
+    //切换闪光灯
+    @OnClick({R.id.ll_flash_light,R.id.ll_input})
+    public void onClick(View view){
+        switch (view.getId()){
+            case R.id.ll_flash_light:
+                if (isLightOn){
+                    dbView.setTorchOff();
+                }else {
+                    dbView.setTorchOn();
+                }
+                break;
+            case R.id.ll_input:
+                showDialog();
+        }
+
+    }
+
+    private void showDialog() {
+        CDialog.Builder builder = new CDialog.Builder(this);
+        builder.setCancelable(false);
+        builder.setTitle("请输入设备编号");
+        //    通过LayoutInflater来加载一个xml的布局文件作为一个View对象
+        View itemView = LayoutInflater.from(this).inflate(R.layout.item_addsite, null);
+        //    设置我们自己定义的布局文件作为弹出框的Content
+        builder.setView(itemView);
+        final EditText deviceno = (EditText)itemView.findViewById(R.id.deviceno);
+        builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
+        {
+            @Override
+            public void onClick(DialogInterface dialog, int which)
+            {
+                String deviceId = deviceno.getText().toString().trim();
+                if (TextUtils.isEmpty(deviceId)){
+                    Toast.makeText(NewCommonScanActivity.this,"设备编号为空,请输入设备号!",Toast.LENGTH_SHORT).show();
+                    return;
+                }
+
+                setResult(33,new Intent().putExtra("deviceNo",deviceId));
+                finish();
+            }
+        });
+        builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
+        {
+            @Override
+            public void onClick(DialogInterface dialog, int which)
+            {
+                dialog.dismiss();
+            }
+        });
+        builder.show();
+    }
+}

+ 30 - 0
app/src/main/java/com/silence/commonframe/activity/home/presenter/AddDevicePresenter.java

@@ -8,6 +8,7 @@ import com.lzy.okgo.cache.CacheMode;
 import com.lzy.okgo.callback.StringCallback;
 import com.silence.commonframe.ApiService;
 import com.silence.commonframe.activity.home.Interface.AddDeviceListener;
+import com.silence.commonframe.bean.BaseBean;
 import com.silence.commonframe.common.constant.UrlConstants;
 import com.silence.commonframe.model.DeviceTypeModel;
 import com.silence.commonframe.utils.Data;
@@ -49,4 +50,33 @@ public class AddDevicePresenter extends AddDeviceListener.Presenter {
                     }
                 });
     }
+
+    public void checkDeviceId(String deviceId) {
+        OkGo.get(ApiService.httpUrl1 + Data.getConfigUrl()+ UrlConstants.CHECK_DEVICE_ID)
+                .tag(this)
+                .params("deviceId",deviceId)
+                .cacheKey("cacheGetKey")
+                .cacheMode(CacheMode.DEFAULT)
+                .headers("token", Data.getToken())
+                .execute(new StringCallback() {
+                    @Override
+                    public void onSuccess(String s, Call call, Response response) {
+                        BaseBean data = new Gson().fromJson(s,BaseBean.class);
+                        if (data.code == 0){
+                            mView.onCheckSuccess(deviceId);
+                        }else {
+                            LoginIn.tokenOut(data.getCode(),mContext);
+                            mView.onFile(data.msg);
+                            mView.onError();
+                        }
+                    }
+
+                    @Override
+                    public void onError(Call call, Response response, Exception e) {
+                        super.onError(call, response, e);
+                        mView.onFile("信息获取失败");
+                        mView.onError();
+                    }
+                });
+    }
 }

+ 3 - 3
app/src/main/java/com/silence/commonframe/activity/home/presenter/CommonScanPresenter.java

@@ -24,10 +24,10 @@ public class CommonScanPresenter extends CommonScanListener.Presenter {
     }
 
     @Override
-    public void checkDeviceId() {
+    public void checkDeviceId(String deviceId) {
         OkGo.get(ApiService.httpUrl1 + Data.getConfigUrl()+ UrlConstants.CHECK_DEVICE_ID)
                 .tag(this)
-                .params("deviceId",mView.getDeviceId())
+                .params("deviceId",deviceId)
                 .cacheKey("cacheGetKey")
                 .cacheMode(CacheMode.DEFAULT)
                 .headers("token", Data.getToken())
@@ -36,7 +36,7 @@ public class CommonScanPresenter extends CommonScanListener.Presenter {
                     public void onSuccess(String s, Call call, Response response) {
                         BaseBean data = new Gson().fromJson(s,BaseBean.class);
                         if (data.code == 0){
-                            mView.onSuccess();
+                            mView.onSuccess(deviceId);
                         }else {
                             LoginIn.tokenOut(data.getCode(),mContext);
                             mView.onFile(data.msg);

+ 3 - 1
app/src/main/java/com/silence/commonframe/activity/mine/activity/setup/SetupActivity.java

@@ -253,7 +253,9 @@ public class SetupActivity extends BaseActivity implements SetupListener.View {
 
     @Override
     public void onError() {
-        switch_wx_bind.setChecked(false);
+        if (switch_wx_bind != null){
+            switch_wx_bind.setChecked(false);
+        }
         isBind = false;
         stopLoading();
     }

+ 2 - 0
app/src/main/java/com/silence/commonframe/common/constant/BaseConstants.java

@@ -59,5 +59,7 @@ public interface BaseConstants {
    String TROUBLE_ABNORMAL = "0";          //类型异常
    String TROUBLE_HID_TROUBLE = "3";       //类型隐患
 
+   String INTENT_ZXING_CONFIG = "zxingConfig";
+
 }
 

+ 67 - 0
app/src/main/java/com/silence/commonframe/utils/ScanUtil.java

@@ -0,0 +1,67 @@
+package com.silence.commonframe.utils;
+
+import com.google.zxing.integration.android.IntentIntegrator;
+import com.silence.commonframe.R;
+import com.silence.commonframe.activity.home.activity.NewCommonScanActivity;
+
+/**
+ * 扫一扫的基本配置
+ */
+public class ScanUtil {
+    int reactColor;
+    int frameLineColor;
+    int ScanLineColor;
+    boolean decodeBarCode;
+
+    public int getReactColor() {
+        return reactColor;
+    }
+
+    public void setReactColor(int reactColor) {
+        this.reactColor = reactColor;
+    }
+
+    public int getFrameLineColor() {
+        return frameLineColor;
+    }
+
+    public void setFrameLineColor(int frameLineColor) {
+        this.frameLineColor = frameLineColor;
+    }
+
+    public int getScanLineColor() {
+        return ScanLineColor;
+    }
+
+    public void setScanLineColor(int scanLineColor) {
+        ScanLineColor = scanLineColor;
+    }
+
+    public boolean isDecodeBarCode() {
+        return decodeBarCode;
+    }
+
+    public void setDecodeBarCode(boolean decodeBarCode) {
+        this.decodeBarCode = decodeBarCode;
+    }
+
+    //扫一扫的配置
+    public ScanUtil getConfig(){
+        ScanUtil config = new ScanUtil();
+        config.setDecodeBarCode(false);     //不扫描条形码
+        config.setReactColor(R.color.scanner_blue);       //四个角的颜色
+        config.setFrameLineColor(R.color.white);    //边框的颜色
+        config.setScanLineColor(R.color.scanner_blue);    //扫描线的颜色
+        return config;
+    }
+
+    public void goScan(IntentIntegrator intentIntegrator){
+        intentIntegrator.setCaptureActivity(NewCommonScanActivity.class);
+        intentIntegrator.setPrompt("将二维码/条形码放入框内,即可自动扫描");  //提示
+        intentIntegrator.setOrientationLocked(true);        //竖屏锁定
+        intentIntegrator.setBarcodeImageEnabled(false);     //是否弹出结果图片
+        intentIntegrator.setBeepEnabled(true);              //是否有声音
+        intentIntegrator.setCameraId(0);                    //前置还是后置(0是后置)
+        intentIntegrator.initiateScan();                    //初始化扫描
+    }
+}

+ 278 - 0
app/src/main/java/com/silence/commonframe/view/ScannerViewfinderView.java

@@ -0,0 +1,278 @@
+package com.silence.commonframe.view;
+
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.LinearGradient;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Shader;
+import android.support.v4.content.ContextCompat;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.animation.DecelerateInterpolator;
+
+import com.google.zxing.ResultPoint;
+import com.journeyapps.barcodescanner.DecoratedBarcodeView;
+import com.journeyapps.barcodescanner.ViewfinderView;
+import com.silence.commonframe.R;
+import com.silence.commonframe.utils.ScanUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ScannerViewfinderView extends ViewfinderView {
+
+    private int maskColor; // 取景框外的背景颜色
+//    private int resultColor;// result Bitmap的颜色
+//    private int resultPointColor; // 特征点的颜色
+    private int reactColor;//四个角的颜色
+//    private int scanLineColor;//扫描线的颜色
+    private int frameLineColor = -1;//边框线的颜色
+
+    private Paint paint, scanLinePaint, reactPaint, frameLinePaint;
+    private Bitmap resultBitmap;
+
+    private List<ResultPoint> possibleResultPoints;
+//    private List<ResultPoint> lastPossibleResultPoints;
+    // 扫描线移动的y
+    private int scanLineTop;
+
+    float[] position = new float[]{0f,0.5f,1f};
+    int[] colors/* = new int[]{0x00ffffff, Color.rgb(86,193,255),0x00ffffff}*/;
+
+    private ValueAnimator valueAnimator;
+    private Rect frame;
+
+    DecoratedBarcodeView barcodeView;
+
+    ScanUtil config;
+
+    public ScannerViewfinderView(Context context){
+        this(context,null);
+    }
+
+    public ScannerViewfinderView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        maskColor = ContextCompat.getColor(getContext(), R.color.viewfinder_mask);
+//        resultColor = ContextCompat.getColor(getContext(), R.color.black);
+//        resultPointColor = ContextCompat.getColor(getContext(), R.color.myblue);
+
+        possibleResultPoints = new ArrayList<ResultPoint>(10);
+        lastPossibleResultPoints = null;
+
+        setConfig(new ScanUtil().getConfig());
+    }
+
+    public void setDecoratedBarcodeView(DecoratedBarcodeView barcodeView){
+        this.barcodeView = barcodeView;
+    }
+
+    public void setConfig(ScanUtil config){
+        this.config = config;
+        reactColor = ContextCompat.getColor(getContext(),config.getReactColor());
+        frameLineColor = ContextCompat.getColor(getContext(), config.getFrameLineColor());
+
+//        scanLineColor = ContextCompat.getColor(getContext(),config.getScanLineColor());
+
+        colors = new int[]{0x00ffffff, getResources().getColor(config.getScanLineColor()),0x00ffffff};
+
+        initPaint();
+    }
+
+    private void initPaint() {
+        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
+
+        /*四个角的画笔*/
+        reactPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+        reactPaint.setColor(reactColor);
+        reactPaint.setStyle(Paint.Style.FILL);
+        reactPaint.setStrokeWidth(dp2px(1));
+
+        /*边框线画笔*/
+        frameLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+        frameLinePaint.setColor(frameLineColor);
+        frameLinePaint.setStrokeWidth(dp2px(1));
+        frameLinePaint.setStyle(Paint.Style.STROKE);
+
+
+        /*扫描线画笔*/
+        scanLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+        scanLinePaint.setStrokeWidth(dp2px(2));
+        scanLinePaint.setStyle(Paint.Style.FILL);
+        scanLinePaint.setDither(true);
+//        scanLinePaint.setColor(scanLineColor);
+
+
+    }
+
+    private void initAnimator() {
+        if (valueAnimator == null) {
+            valueAnimator = ValueAnimator.ofInt(frame.top, frame.bottom);
+            valueAnimator.setDuration(3000);
+            valueAnimator.setInterpolator(new DecelerateInterpolator());
+            valueAnimator.setRepeatMode(ValueAnimator.RESTART);
+            valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
+            valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+                public void onAnimationUpdate(ValueAnimator animation) {
+
+                    scanLineTop = (int) animation.getAnimatedValue();
+                    invalidate();
+
+                }
+            });
+
+            valueAnimator.start();
+        }
+    }
+
+    public void stopAnimator() {
+        if (valueAnimator != null) {
+            valueAnimator.end();
+            valueAnimator.cancel();
+            valueAnimator = null;
+        }
+
+    }
+
+    private void drawMaskView(Canvas canvas, Rect frame, int width, int height) {
+        // Draw the exterior (i.e. outside the framing rect) darkened
+        // 绘制取景框外的暗灰色的表面,分四个矩形绘制
+        paint.setColor(maskColor);
+        /*上面的框*/
+        canvas.drawRect(0, 0, width, frame.top, paint);
+        /*绘制左边的框*/
+        canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);
+        /*绘制右边的框*/
+        canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1,
+                paint);
+        /*绘制下面的框*/
+        canvas.drawRect(0, frame.bottom + 1, width, height, paint);
+    }
+
+    /**
+     * 绘制取景框边框
+     *
+     * @param canvas
+     * @param frame
+     */
+    private void drawFrameBounds(Canvas canvas, Rect frame) {
+
+        /*扫描框的边框线*/
+        canvas.drawRect(frame, frameLinePaint);
+
+
+
+        /*四个角的长度和宽度*/
+        int width = frame.width();
+        int corLength = (int) (width * 0.07);
+        int corWidth = (int) (corLength * 0.2);
+
+        corWidth = corWidth > 15 ? 15 : corWidth;
+
+
+        /*角在线外*/
+        // 左上角
+        canvas.drawRect(frame.left - corWidth, frame.top, frame.left, frame.top
+                + corLength, reactPaint);
+        canvas.drawRect(frame.left - corWidth, frame.top - corWidth, frame.left
+                + corLength, frame.top, reactPaint);
+        // 右上角
+        canvas.drawRect(frame.right, frame.top, frame.right + corWidth,
+                frame.top + corLength, reactPaint);
+        canvas.drawRect(frame.right - corLength, frame.top - corWidth,
+                frame.right + corWidth, frame.top, reactPaint);
+        // 左下角
+        canvas.drawRect(frame.left - corWidth, frame.bottom - corLength,
+                frame.left, frame.bottom, reactPaint);
+        canvas.drawRect(frame.left - corWidth, frame.bottom, frame.left
+                + corLength, frame.bottom + corWidth, reactPaint);
+        // 右下角
+        canvas.drawRect(frame.right, frame.bottom - corLength, frame.right
+                + corWidth, frame.bottom, reactPaint);
+        canvas.drawRect(frame.right - corLength, frame.bottom, frame.right
+                + corWidth, frame.bottom + corWidth, reactPaint);
+    }
+
+    /**
+     * 绘制移动扫描线
+     *
+     * @param canvas
+     * @param frame
+     */
+    private void drawScanLight(Canvas canvas, Rect frame) {
+        //设置渐变
+        LinearGradient linearGradient = new LinearGradient(frame.left + 1,scanLineTop,frame.right - 1,scanLineTop,colors,position, Shader.TileMode.CLAMP);
+        scanLinePaint.setShader(linearGradient);
+        canvas.drawLine(frame.left + 1, scanLineTop, frame.right + 1, scanLineTop, scanLinePaint);
+//        canvas.drawRect(frame.left + 1,scanLineTop,frame.right - 1,scanLineTop,scanLinePaint);
+    }
+
+    public void drawViewfinder() {
+        Bitmap resultBitmap = this.resultBitmap;
+        this.resultBitmap = null;
+        if (resultBitmap != null) {
+            resultBitmap.recycle();
+        }
+        invalidate();
+    }
+
+    /**
+     * Draw a bitmap with the result points highlighted instead of the live
+     * scanning display.
+     *
+     * @param barcode An image of the decoded barcode.
+     */
+    public void drawResultBitmap(Bitmap barcode) {
+        resultBitmap = barcode;
+        invalidate();
+    }
+
+    public void addPossibleResultPoint(ResultPoint point) {
+        List<ResultPoint> points = possibleResultPoints;
+        synchronized (points) {
+            points.add(point);
+            int size = points.size();
+            if (size > MAX_RESULT_POINTS) {
+                // trim it
+                points.subList(0, size - MAX_RESULT_POINTS / 2).clear();
+            }
+        }
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        refreshSizes();
+
+        if (framingRect == null || previewFramingRect == null){
+            return;
+        }
+
+        frame = framingRect;
+        Rect previewFrame = previewFramingRect;
+        initAnimator();
+
+        int width = getWidth();
+        int height = getHeight();
+
+        /*绘制遮罩*/
+        drawMaskView(canvas,frame,width,height);
+
+        /*绘制取景框边框*/
+        drawFrameBounds(canvas,frame);
+
+        if (resultBitmap != null){
+            paint.setAlpha(CURRENT_POINT_OPACITY);
+            canvas.drawBitmap(resultBitmap,null,frame,paint);
+        }else {
+            /*绘制扫描线*/
+            drawScanLight(canvas,frame);
+        }
+    }
+
+    private int dp2px(int dp) {
+        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());
+    }
+}

+ 103 - 0
app/src/main/res/layout/activity_common_scan_new.xml

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    tools:context=".activity.home.activity.NewCommonScanActivity">
+
+    <SurfaceView
+        android:id="@+id/sv_preview_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentTop="true">
+
+        <!-- 扫描取景框 -->
+        <com.journeyapps.barcodescanner.DecoratedBarcodeView
+            android:id="@+id/db_custom"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:zxing_preview_scaling_strategy="fitXY"
+            app:zxing_use_texture_view="false"
+            app:zxing_scanner_layout="@layout/barcode_scanner">
+
+        </com.journeyapps.barcodescanner.DecoratedBarcodeView>
+
+        <LinearLayout
+            android:id="@+id/ll_bottom"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingTop="10dp"
+            android:paddingBottom="20dp"
+            android:layout_gravity="bottom"
+            android:background="#70444444"
+            android:orientation="horizontal">
+
+            <LinearLayout
+                android:id="@+id/ll_flash_light"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:gravity="center"
+                android:orientation="vertical">
+
+                <ImageView
+                    android:id="@+id/iv_flash_light"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:src="@drawable/shouquan_qrcode_s_flashgun" />
+
+                <TextView
+                    android:id="@+id/tv_flash_light"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="5dp"
+                    android:gravity="center"
+                    android:text="开灯"
+                    android:textColor="#ffffff" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:id="@+id/ll_input"
+                android:layout_width="0dp"
+                android:layout_height="match_parent"
+                android:layout_weight="1"
+                android:gravity="center"
+                android:orientation="vertical">
+
+                <ImageView
+                    android:id="@+id/iv_input"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:tint="#ffffffff"
+                    android:src="@drawable/shouquan_qrcode_g_gallery" />
+
+                <TextView
+                    android:id="@+id/tv_input"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="5dp"
+                    android:gravity="center"
+                    android:text="手动输入"
+                    android:textColor="#ffffff" />
+
+            </LinearLayout>
+
+        </LinearLayout>
+
+
+        <com.silence.commonframe.base.basemvp.TitleBar
+            android:id="@+id/base_title_bar"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"/>
+
+    </FrameLayout>
+
+</RelativeLayout>

+ 26 - 0
app/src/main/res/layout/barcode_scanner.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <com.journeyapps.barcodescanner.BarcodeView
+        android:id="@+id/zxing_barcode_surface"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:zxing_framing_rect_width="250dp"
+        app:zxing_framing_rect_height="250dp"/>
+
+    <com.silence.commonframe.view.ScannerViewfinderView
+        android:id="@+id/zxing_viewfinder_view"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+    <TextView
+        android:id="@+id/zxing_status_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_marginTop="150dp"
+        android:text=""
+        android:textColor="@color/white"/>
+
+</merge>

+ 2 - 0
app/src/main/res/values/colors.xml

@@ -25,6 +25,8 @@
     <color name="white">#ffffff</color>
     <color name="hint">#d8d8d8</color>
 
+    <color name="scanner_blue">#56C1FF</color>
+    <color name="viewfinder_mask">#50000000</color>
 
     <color name="blue">#6666ff</color>
     <!--<color name="white">#fff</color>-->