Android 手机各大厂商的指纹设置界面

这篇博客介绍了如何在Android应用中根据不同厂商的定制化操作,跳转到相应的指纹设置界面。通过判断手机品牌,如Sony、OPPO、Huawei等,设置对应的包名和类名来启动意图,最后对于未列出的厂商则统一跳转到系统设置。代码中包含了异常处理,确保在跳转过程中能正常运行。
摘要由CSDN通过智能技术生成

开发中有的时候要跳转到指纹设置界面,Android厂商较多,基本都是定制化的操作,所以每个厂商的指纹设计界面各不相同。下面罗列几款市面上比较常用的手机厂商的指纹设置界面,并附上跳转方式。

private final String SONY = "sony";
private final String OPPO = "oppo";
private final String HUAWEI = "huawei";
private final String HONOR = "honor";
private final String XIAOMI = "xiaomi";
private final String VIVO = "vivo";
private final String KNT = "knt";
private final String OnePlus = "OnePlus";
private final String samsung = "samsung";
private final String meizu = "meizu";
private final String ZTE = "zte";
private final String nubia = "nubia";
if (compareTextSame(SONY)){
    pcgName = "com.android.settings";
    clsName = "com.android.settings.Settings$FingerprintEnrollSuggestionActivity";
} else if (compareTextSame(OPPO)) {
    pcgName = "com.android.settings";
    clsName = "com.coloros.settings.feature.fingerprint.ColorFingerprintSettings";
} else if (compareTextSame(HUAWEI)) {
    pcgName = "com.android.settings";
    clsName = "com.android.settings.fingerprint.FingerprintSettingsActivity";
} else if (compareTextSame(HONOR)) {
    pcgName = "com.android.settings";
    clsName = "com.android.settings.fingerprint.FingerprintSettingsActivity";
}else if (compareTextSame(XIAOMI)){
    pcgName = "com.android.settings";
    clsName = "com.android.settings.NewFingerprintActivity";
}else if (compareTextSame(VIVO)){
    pcgName = "com.android.settings";
    clsName = "com.android.settings.Settings$FingerpintAndFaceSettingsActivity";
} else if (compareTextSame(OnePlus)){
    pcgName = "com.android.settings";
    clsName = "com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroduction";
}else if (compareTextSame(samsung)){
    pcgName = "com.android.settings";
    clsName = "com.samsung.android.settings.biometrics.BiometricsDisclaimerActivity";
} else if (compareTextSame(meizu)){
    pcgName = "com.android.settings";
    clsName = "com.android.settings.Settings$SecurityDashboardActivity";
} else if (compareTextSame(ZTE)){
    pcgName = "com.android.settings";
    clsName = "com.android.settings.ChooseLockGeneric";
}else if (compareTextSame(nubia)){
    pcgName = "com.android.settings";
    clsName = "cn.nubia.settings.fingerprint.FingerprintSettings";
}

下面是一些用到的方法

 /**
     * 获得当前手机品牌
     * @return 例如:HONOR
     */
    private String getBrand() {
        return android.os.Build.BRAND;
    }
    /**
     * 对比两个字符串,并且比较字符串是否包含在其中的,并且忽略大小写
     * @param value
     * @return
     */
    private boolean compareTextSame(String value) {
        return value.toUpperCase().indexOf(getBrand().toUpperCase()) >= 0 ;
    }

跳转

Intent intent = new Intent();
ComponentName componentName = new ComponentName(pcgName, clsName);
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(componentName);
startActivity(intent);

最后如果机型都不在的情况或者跳转的过程中出差错我们可以用try{}cache()捕获一下然后统一跳转到系统设置界面

String pcgNamePlace = "com.android.settings";
String clsNamePlace = "com.android.settings.Settings";
Intent intent = new Intent();
ComponentName componentName = new ComponentName(pcgNamePlace, clsNamePlace);
intent.setComponent(componentName);
intent.setAction(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

下面附上完整的代码

private final String SONY = "sony";
private final String OPPO = "oppo";
private final String HUAWEI = "huawei";
private final String HONOR = "honor";
private final String XIAOMI = "xiaomi";
private final String KNT = "knt";
private final String OnePlus = "OnePlus";
private final String samsung = "samsung";
private final String meizu = "meizu";
private final String ZTE = "zte";

/**
 * 跳转到指纹页面 或 通知用户去指纹录入
 */
public void startFingerprint() {

    String pcgName = null;
    String clsName = null;

    if (compareTextSame(SONY)){
        pcgName = "com.android.settings";
        clsName = "com.android.settings.Settings$FingerprintEnrollSuggestionActivity";
    } else if (compareTextSame(OPPO)) {
        pcgName = "com.android.settings";
        clsName = "com.coloros.settings.feature.fingerprint.ColorFingerprintSettings";
    } else if (compareTextSame(HUAWEI)) {
        pcgName = "com.android.settings";
        clsName = "com.android.settings.fingerprint.FingerprintSettingsActivity";
    } else if (compareTextSame(HONOR)) {
        pcgName = "com.android.settings";
        clsName = "com.android.settings.fingerprint.FingerprintSettingsActivity";
    }else if (compareTextSame(XIAOMI)){
        pcgName = "com.android.settings";
        clsName = "com.android.settings.NewFingerprintActivity";
    }
    else if (compareTextSame(OnePlus)){
        pcgName = "com.android.settings";
        clsName = "com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroduction";
    } else if (compareTextSame(samsung)){
        pcgName = "com.android.settings";
        clsName = "com.samsung.android.settings.biometrics.BiometricsDisclaimerActivity";
    } else if (compareTextSame(meizu)){
        pcgName = "com.android.settings";
        clsName = "com.android.settings.Settings$SecurityDashboardActivity";
    } else if (compareTextSame(ZTE)){
        pcgName = "com.android.settings";
        clsName = "com.android.settings.ChooseLockGeneric";
    } else {
        String pcgNamePlace = "com.android.settings";
        String clsNamePlace = "com.android.settings.Settings";
        Intent intent = new Intent();
        ComponentName componentName = new ComponentName(pcgNamePlace, clsNamePlace);
        intent.setComponent(componentName);
        intent.setAction(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
    try {
        if (!TextUtils.isEmpty(pcgName) && !TextUtils.isEmpty(clsName)) {
            Intent intent = new Intent();
            ComponentName componentName = new ComponentName(pcgName, clsName);
            intent.setAction(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setComponent(componentName);
            startActivity(intent);
        }
    } catch (Exception e) {
        String pcgNamePlace = "com.android.settings";
        String clsNamePlace = "com.android.settings.Settings";
        Intent intent = new Intent();
        ComponentName componentName = new ComponentName(pcgNamePlace, clsNamePlace);
        intent.setComponent(componentName);
        intent.setAction(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
}

/**
 * 获得当前手机品牌
 * @return 例如:HONOR
 */
private String getBrand() {
    return android.os.Build.BRAND;
}

/**
 * 对比两个字符串,并且比较字符串是否包含在其中的,并且忽略大小写
 * @param value
 * @return
 */
private boolean compareTextSame(String value) {
    return value.toUpperCase().indexOf(getBrand().toUpperCase()) >= 0 ;
}

建议写个工具类不要写在activity里面。跳转的时候使用Application的Context

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rnwater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值