最近在适配凹形屏,看到网上已有很多示例代码,但是估计都是出自一个人之手,犯的错误都一样,oppo 凹形屏、华为凹形屏 基本都没问题,可以自行 google; 但是很多文章的 vivo凹形屏适配 反射写错了,下面是正确的实现:
- Kotlin 版本:
/**
* 在vivo系统中,判断此设备是否具有凹槽或圆角
*
* @param mask 0x00000020表示是否有凹槽; 0x00000008表示是否有圆角
* @return true表示具备此特征; false表示没有此特性;
*/
private fun isVivoFeatureSupport(mask: Int, context: Context): Boolean {
return try {
val classLoader = context.classLoader
val ftFeatureClass = classLoader.loadClass("android.util.FtFeature")
val isFeatureSupportMethod = ftFeatureClass.getMethod("isFeatureSupport", Int::class.java)
isFeatureSupportMethod.invoke(ftFeatureClass,
mask) as Boolean
} catch (e: Exception) {
false
} catch (e: Error) {
false
}
}
- Java 版本:
/**
* 在vivo系统中,判断此设备是否具有凹槽或圆角
*
* @param mask 0x00000020表示是否有凹槽; 0x00000008表示是否有圆角
* @return true表示具备此特征; false表示没有此特性;
*/
private static boolean isVivoFeatureSupport(int mask, @NonNull Context context) {
try {
ClassLoader classLoader = context.getClassLoader();
@SuppressLint("PrivateApi")
Class ftFeatureClass = classLoader.loadClass("android.util.FtFeature");
Method isFeatureSupportMethod = ftFeatureClass.getMethod("isFeatureSupport",
int.class);
boolean isSupport = (boolean) isFeatureSupportMethod.invoke(ftFeatureClass, mask);
Log.i(LOG_TAG, "isVivoFeatureSupport: " + isSupport);
return isSupport;
} catch (Exception | Error e) {
Log.i(LOG_TAG, "isVivoFeatureSupport Exception: " + e.getMessage());
return false;
}
}
网友评论