开发中有的时候要跳转到指纹设置界面,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