packageManager.hasSystemFeature(PackageManager.FEATURE_FACE)这个代码的实现源码是什么
时间: 2024-03-05 15:48:51 浏览: 135
PackageManager.rar_单片机开发_Unix_Linux_
PackageManager.hasSystemFeature(String) 方法的实现源码如下:
```java
public boolean hasSystemFeature(@NonNull String name) {
try {
return getPM().hasSystemFeature(name);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
```
其中,getPM() 方法会返回 PackageManager 的代理对象,该对象通过 Binder 机制与 PackageManagerService 进行通信。
PackageManagerService.hasSystemFeature(String) 方法的实现源码如下:
```java
public boolean hasSystemFeature(String name) {
synchronized (mPackages) {
FeatureInfo feat = mSettings.mAvailableFeatures.get(name);
if (feat != null) {
return true;
}
for (int i = mSettings.mUnavailableFeatures.size() - 1; i >= 0; i--) {
if (name.equals(mSettings.mUnavailableFeatures.get(i))) {
return false;
}
}
try {
return getPackageManager().hasSystemFeature(name);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
}
```
该方法首先会从 mSettings.mAvailableFeatures 中查找是否存在指定名称的特性,如果存在则返回 true。如果不存在,则会从 mSettings.mUnavailableFeatures 中查找是否存在指定名称的特性,如果存在则返回 false。如果两个列表中都没有指定名称的特性,则会调用 getPackageManager().hasSystemFeature(String) 方法来查询系统是否支持该特性。
getPackageManager() 方法会返回 PackageManager 的代理对象,该对象通过 Binder 机制与 PackageManagerService 进行通信。
上述代码中的 mSettings 是一个 Settings 类型的对象,表示 PackageManagerService 的一些配置信息,例如支持的特性列表、安装应用程序的策略等。
阅读全文