Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
ShenghuoquanBusiness
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bp
ShenghuoquanBusiness
Commits
7a6599b8
Commit
7a6599b8
authored
May 30, 2021
by
yinjiacheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add 身份证FaceID采集逻辑
parent
3d37545f
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
116 additions
and
18 deletions
+116
-18
Constant.kt
.../com/yidian/shenghuoquan/newscontent/constant/Constant.kt
+5
-3
LifeAccountIDCardAuthFragment.kt
...quan/newscontent/ui/auth/LifeAccountIDCardAuthFragment.kt
+103
-13
BitmapUtil.kt
...a/com/yidian/shenghuoquan/newscontent/utils/BitmapUtil.kt
+8
-2
No files found.
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/constant/Constant.kt
View file @
7a6599b8
...
...
@@ -20,6 +20,8 @@ object Constant {
// 调用系统相机、打开系统相册 requestCode
const
val
REQUEST_CODE_OPEN_ALBUM
=
101
const
val
REQUEST_CODE_OPEN_CAMERA
=
102
// 调用旷视FaceID进行身份证采集 requestCode
const
val
REQUEST_CODE_ID_CARD_CAPTURE
=
103
// 身份证人像面、身份证国徽面、营业执照待上传临时存储path,营业执照相机拍照临时存储path
const
val
FILE_PATH_ID_CARD_PORTRAIT_FACE
=
"/ocr/id_card/portrait_face.jpg"
...
...
@@ -27,7 +29,7 @@ object Constant {
const
val
FILE_PATH_BUSINESS_LICENSE_CAMERA
=
"/ocr/business_license_camera.jpg"
const
val
FILE_PATH_BUSINESS_LICENSE
=
"/ocr/business_license.jpg"
//
上传
身份证人像面、身份证国徽面标识
const
val
OPCODE_ID_CARD_PORTRAIT_FACE
=
0
const
val
OPCODE_ID_CARD_NATIONAL_EMBLEM_FACE
=
1
// 身份证人像面、身份证国徽面标识
const
val
ID_CARD_PORTRAIT_FACE
=
1
const
val
ID_CARD_NATIONAL_EMBLEM_FACE
=
2
}
\ No newline at end of file
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/ui/auth/LifeAccountIDCardAuthFragment.kt
View file @
7a6599b8
...
...
@@ -3,6 +3,7 @@ package com.yidian.shenghuoquan.newscontent.ui.auth
import
android.app.Activity
import
android.content.ContentResolver
import
android.content.Intent
import
android.graphics.BitmapFactory
import
android.net.Uri
import
android.os.Build
import
android.os.Bundle
...
...
@@ -12,6 +13,10 @@ import android.util.Log
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
com.megvii.demo.activity.IDCardDetectActivity
import
com.megvii.demo.utils.Configuration
import
com.megvii.idcardquality.IDCardQualityLicenseManager
import
com.megvii.licensemanager.Manager
import
com.yidian.common.base.BaseFragment
import
com.yidian.common.utils.YdFileUtils
import
com.yidian.shenghuoquan.newscontent.R
...
...
@@ -25,6 +30,7 @@ import com.yidian.shenghuoquan.newscontent.http.httpbean.IGetIDCardOCRCallback
import
com.yidian.shenghuoquan.newscontent.ui.dialog.BottomSelectDialog
import
com.yidian.shenghuoquan.newscontent.utils.BitmapUtil
import
com.yidian.shenghuoquan.newscontent.utils.KS3Core
import
com.yidian.utils.ToastUtil
import
java.io.File
import
java.io.FileOutputStream
...
...
@@ -36,17 +42,15 @@ import java.io.FileOutputStream
class
LifeAccountIDCardAuthFragment
:
BaseFragment
<
FragmentLifeAccountIdCardAuthBinding
>(),
View
.
OnClickListener
,
BottomSelectAdapter
.
OnItemClickListener
<
BottomSelectBean
>
{
override
fun
createViewBinding
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?
):
FragmentLifeAccountIdCardAuthBinding
{
return
FragmentLifeAccountIdCardAuthBinding
.
inflate
(
layoutInflater
,
container
,
false
)
companion
object
{
// 身份证采集页面回传数据
private
const
val
EXTRA_NAME_ID_CARD_IMAGE
=
"idcardimg_bitmap"
}
/**
* 标识用户当前上传的是身份证人像面或身份证国徽面 帮助onActivityResult区分
*/
private
var
cur
OpCod
e
:
Int
=
-
1
private
var
cur
Fac
e
:
Int
=
-
1
/**
* 缓存身份证两面上传金山云的objectKey
...
...
@@ -59,10 +63,18 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
*/
private
val
commonPath
by
lazy
{
activity
?.
externalCacheDir
?.
absolutePath
}
override
fun
createViewBinding
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?
):
FragmentLifeAccountIdCardAuthBinding
{
return
FragmentLifeAccountIdCardAuthBinding
.
inflate
(
layoutInflater
,
container
,
false
)
}
override
fun
init
(
savedInstanceState
:
Bundle
?)
{
super
.
init
(
savedInstanceState
)
initView
()
initListener
()
initFaceID
()
}
private
fun
initView
()
{
...
...
@@ -75,11 +87,46 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
viewBinding
.
ivFaceAuthStart
.
setOnClickListener
(
this
)
}
/**
* 初始化旷视FaceID
*/
private
fun
initFaceID
()
{
// 竖屏采集
Configuration
.
setIsVertical
(
activity
,
true
)
checkFaceIDLicense
()
}
/**
* 检查旷视FaceID授权有效
*/
private
fun
checkFaceIDLicense
():
Boolean
{
val
licenseManager
=
IDCardQualityLicenseManager
(
activity
)
if
(
licenseManager
.
checkCachedLicense
()
>
0
)
{
//已授权或者授权未过期
Log
.
i
(
Constant
.
LIFE_ACCOUNT_AUTH_TAG
,
"FaceID 授权有效"
)
return
true
}
else
{
//需要重新授权
Log
.
i
(
Constant
.
LIFE_ACCOUNT_AUTH_TAG
,
"FaceID 授权无效,开始获取授权"
)
Thread
{
val
manager
=
Manager
(
activity
,
true
)
manager
.
registerLicenseManager
(
licenseManager
)
manager
.
takeLicenseFromNetwork
(
licenseManager
.
getContext
(
Configuration
.
getUUID
(
activity
)
)
)
}.
start
()
}
return
false
}
override
fun
onClick
(
v
:
View
?)
{
when
(
v
?.
id
)
{
R
.
id
.
iv_id_card_portrait_face
->
{
// 上传身份证人像面
curOpCode
=
Constant
.
OPCODE_ID_CARD_PORTRAIT_FACE
curFace
=
Constant
.
ID_CARD_PORTRAIT_FACE
Configuration
.
setCardType
(
activity
,
Constant
.
ID_CARD_PORTRAIT_FACE
)
activity
?.
let
{
BottomSelectDialog
(
it
,
...
...
@@ -93,7 +140,8 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
}
R
.
id
.
iv_id_card_national_emblem_face
->
{
// 上传身份证国徽面
curOpCode
=
Constant
.
OPCODE_ID_CARD_NATIONAL_EMBLEM_FACE
curFace
=
Constant
.
ID_CARD_NATIONAL_EMBLEM_FACE
Configuration
.
setCardType
(
activity
,
Constant
.
ID_CARD_NATIONAL_EMBLEM_FACE
)
activity
?.
let
{
BottomSelectDialog
(
it
,
...
...
@@ -114,8 +162,15 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
override
fun
onItemClick
(
view
:
View
,
position
:
Int
,
data
:
BottomSelectBean
)
{
when
(
data
.
item
)
{
Constant
.
ITEM_TAKE_PHOTO
->
{
// TODO: 5/30/21 调用旷视进行身份证采集
// 调用FaceID进行身份证采集
if
(
checkFaceIDLicense
())
{
startActivityForResult
(
Intent
(
activity
,
IDCardDetectActivity
::
class
.
java
),
Constant
.
REQUEST_CODE_ID_CARD_CAPTURE
)
}
else
{
ToastUtil
.
showToast
(
activity
,
"获取授权失败,请稍后重试"
)
}
}
Constant
.
ITEM_OPEN_ALBUM
->
{
// 打开系统相册
...
...
@@ -135,7 +190,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
if
(
resultCode
==
Activity
.
RESULT_OK
)
{
when
(
requestCode
)
{
Constant
.
REQUEST_CODE_OPEN_ALBUM
->
{
if
(
cur
OpCode
==
Constant
.
OPCODE_
ID_CARD_PORTRAIT_FACE
)
{
if
(
cur
Face
==
Constant
.
ID_CARD_PORTRAIT_FACE
)
{
val
bitmap
=
BitmapUtil
.
generateBitmapFromUri
(
activity
,
data
?.
data
,
...
...
@@ -143,8 +198,7 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
)
viewBinding
.
ivIdCardPortraitFace
.
setImageBitmap
(
bitmap
)
BitmapUtil
.
generateFileFromBitmap
(
bitmap
,
commonPath
+
Constant
.
FILE_PATH_ID_CARD_PORTRAIT_FACE
bitmap
,
15
,
commonPath
+
Constant
.
FILE_PATH_ID_CARD_PORTRAIT_FACE
)
}
else
{
val
bitmap
=
BitmapUtil
.
generateBitmapFromUri
(
...
...
@@ -153,8 +207,44 @@ class LifeAccountIDCardAuthFragment : BaseFragment<FragmentLifeAccountIdCardAuth
viewBinding
.
ivIdCardNationalEmblemFace
)
viewBinding
.
ivIdCardNationalEmblemFace
.
setImageBitmap
(
bitmap
)
BitmapUtil
.
generateFileFromBitmap
(
bitmap
,
15
,
commonPath
+
Constant
.
FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE
)
}
if
(
File
(
commonPath
+
Constant
.
FILE_PATH_ID_CARD_PORTRAIT_FACE
).
exists
()
&&
File
(
commonPath
+
Constant
.
FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE
).
exists
()
)
{
// 身份证两面都已选择 执行上传金山云
startUpload
()
}
}
Constant
.
REQUEST_CODE_ID_CARD_CAPTURE
->
{
val
bytes
=
data
?.
getByteArrayExtra
(
EXTRA_NAME_ID_CARD_IMAGE
)
if
(
curFace
==
Constant
.
ID_CARD_PORTRAIT_FACE
)
{
val
bitmap
=
bytes
?.
size
?.
let
{
BitmapFactory
.
decodeByteArray
(
bytes
,
0
,
it
)
}
viewBinding
.
ivIdCardPortraitFace
.
setImageBitmap
(
bitmap
)
BitmapUtil
.
generateFileFromBitmap
(
bitmap
,
100
,
commonPath
+
Constant
.
FILE_PATH_ID_CARD_PORTRAIT_FACE
)
}
else
{
val
bitmap
=
bytes
?.
size
?.
let
{
BitmapFactory
.
decodeByteArray
(
bytes
,
0
,
it
)
}
viewBinding
.
ivIdCardNationalEmblemFace
.
setImageBitmap
(
bitmap
)
BitmapUtil
.
generateFileFromBitmap
(
bitmap
,
100
,
commonPath
+
Constant
.
FILE_PATH_ID_CARD_NATIONAL_EMBLEM_FACE
)
}
...
...
Components/newscontent/src/main/java/com/yidian/shenghuoquan/newscontent/utils/BitmapUtil.kt
View file @
7a6599b8
...
...
@@ -5,6 +5,7 @@ import android.graphics.Bitmap
import
android.graphics.BitmapFactory
import
android.net.Uri
import
android.view.View
import
java.io.File
import
java.io.FileOutputStream
/**
...
...
@@ -46,9 +47,14 @@ object BitmapUtil {
/**
* Bitmap to File
* @param quality 压缩质量
* @param destPath 目标文件路径
*/
fun
generateFileFromBitmap
(
bitmap
:
Bitmap
?,
destPath
:
String
)
{
bitmap
?.
compress
(
Bitmap
.
CompressFormat
.
JPEG
,
15
,
FileOutputStream
(
destPath
))
fun
generateFileFromBitmap
(
bitmap
:
Bitmap
?,
quality
:
Int
,
destPath
:
String
)
{
val
file
=
File
(
destPath
)
if
(
file
.
exists
())
file
.
delete
()
file
.
parentFile
?.
mkdirs
()
file
.
createNewFile
()
bitmap
?.
compress
(
Bitmap
.
CompressFormat
.
JPEG
,
quality
,
FileOutputStream
(
destPath
))
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment