vivo X21屏下指纹适配指南

vivo X21屏下指纹适配指南,点击此处可下载开发过程中所需的全部代码。文档具体内容如下:

一、FingerprintInsets

public final class FingerprintInsets

extends Object

java.lang.Object    

↳  com.vivo.fingerprint.ud.FingerprintInsets

该类描述屏幕指纹相关信息,例如指纹图标位置,指纹图标显示状态等。该类会连接屏幕指纹服务获取状态信息,应用只有在 isReady() 返回 true 的时候才能通过该类的其它接口获取相关信息。使用本接口,需要应用声明com.vivo.fingerprint.permission.READ_STATE 权限,调用 create 方法后,应用不再使用该系列接口后应该调用 destroy 方法释放相关的资源,避免造成可能发生的内存泄露。

该类的方法都不是线程安全的,这就意味着所有方法都应该在同一线程中调用,create 方法会创建一个 Handler,因此该类的所有方法应该在主线程或者有 Looper 的线程中调用。

使用该类的 minSdkVersion 应该不小于 11(Android 3.0.x)。该类能够在 vivo 手机及其它 sdk version 不小于 11 的非 vivo 设备上使用。本类依赖 android-support-v4。

ICON_INVISIBLE

int ICON_INVISIBLE = 0

图标状态标记,表示指纹图标不可见。

值:0

ICON_VISIBLE

int ICON_VISIBLE = 1

图标状态标记,表示指纹图标可见。

static void setDebugEnable(boolean enable)

打开或者关闭内部日志

enable: 是否打开日志

static FingerprintInsets

create(Context context,FingerprintInsetsListener listener)

该类可以创建对象实例,如果多次调用该方法并且没有调用 destroy,则返回的是同一个对象,如果创建失败,则返回空,这种情况一般是在非 vivo 手机上调用该接口,如果创建成功,该方法会产生一个对 context 的弱引用对象,listener 可为 null。

context:组件上下文

listener:Insets 内部事件监听器

返回值:创建成功返回非空置,失败则为空

boolean isReady()

指纹相关状态是否初始化完毕,只有在初始化完毕后,才能调用其它接口获取正确的参数。

void destroy()

清理当前实例对象。

boolean hasUnderDisplayFingerprint()

当前机型是否有屏幕指纹,非 vivo 机型上始终返回 false

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

void setFingerprintInsetsListener(FingerprintInsetsListener listener)

设置 insets 事件监听器,用于 isReady 和 图标状态变化事件(显示,隐藏)监听。

listener:Insets 内部事件监听器

int getFingerprintIconState()

获取指纹图标状态,返回 ICON_INVISIBLE 或者 ICON_INVISIBLE

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

Rect getFingerprintIconPosition()

获取指纹图标位置,返回指纹图标 left, top, right, bottom四个维度,坐标值为屏幕绝对坐标。

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

int getFingerprintIconLeft()

获取指纹图标 left 值

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

int getFingerprintIconTop()

获取指纹图标 top 值

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

int getFingerprintIconRight()

获取指纹图标 right 值

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

int getFingerprintIconBottom()

获取指纹图标 bottom 值

注意:该方法只有在 isReady 和 hasUnderDisplayFingerprint 返回 true 时返回有效值。

二、FingerprintInsets.FingerprintInsetsListener

public interface FingerprintInsets.FingerprintInsetsListener

com.vivo.fingerprint.ud.FingerprintInsets.FingerprintInsetsListener

监听 FingerprintInsets 事件,包括 Insets 准备就绪,指纹图标显示或者隐藏。

void onReady()

Insets 准备就绪

void onIconStateChanged(int state)

指纹图标状态变化

state:FingerprintInsets.ICON_VISIBLE 可见,FingerprintInsets.ICON_VISIBLE 不可见,-1 状态更新中。

 代码示例 ↓ 

private FingerprintInsets mInsets;


class InsetsListener implements
   FingerprintInsets.FingerprintInsetsListener {
   @Override
   public void onReady() {
       boolean hasUdFeature =
           mInsets.hasUnderDisplayFingerprint();
       if (hasUdFeature) {
           final Rect rect =
             mInsets.getFingerprintIconPosition();
           Log.d(TAG, “iconRect:” +
                   rect.toShortString());
           // TODO: vivo device support
           // under display fingerprint.
       } else {
           // TODO: vivo device don’t
           // support under display 
           // fingerprint.
       }
   }


   @Override
   public void onIconStateChanged(int state) {
       Log.d(TAG, “onIconStateChanged ” + state);
   }
}


mInsets = FingerprintInsets.create(
       this, new InsetsListener());
if (mInsets == null) {
   // TODO: Not vivo device.
}


// Later call destroy if needed.
if (mInsets != null) {
   mInsets.setFingerprintInsetsListener(null);
   mInsets.destroy();
   mInsets = null;
}