我想获取设备中存在的所有包的活动信息(例如配置更改、调整大小模式,如果支持画中画)。
我可以使用获取活动信息PackageManager
with GET_ACTIVITIES
旗帜。这样我就可以得到configChanges
价值利用ActivityInfo.configChanges
.
但是,如果设置了多个配置值,则该值返回随机 intandroid:configChanges
.
For ex:
如果设置以下值
android:configChanges="uiMode|smallestScreenSize|区域设置|colorMode|密度"
使用下面的代码获取 configchanges 值
PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
ActivityInfo activityInfo[] = packageInfo.activities;
if(activityInfo!=null) {
for(ActivityInfo activity : activityInfo) {
int configChange = activity.configChanges;
}
}
I get activity.configChanges
值为 23047
23047 表示什么,如何解码它以便我可以获得在中设置的配置值AndroidManifest.xml
除此之外我们还有什么办法可以得到activity.resizeMode
。我明白这是@hide
API。我可以在 Android Studio 中看到调试模式下的值。
上述任何线索/帮助都将非常有用。
configChanges
是一个位掩码。
要检查给定位是否已设置,您只需使用适当的按位运算符 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html.
例如,检查是否uiMode
已设置,您可以执行以下操作:
int configChanges = activityInfo.configChanges;
if ((configChanges & ActivityInfo.CONFIG_UI_MODE) == ActivityInfo.CONFIG_UI_MODE) {
// uiMode is set
} else {
// uiMode is not set
}
定义一个方法可能会更容易:
public boolean isConfigSet(int configMask, int configToCheck) {
return (configMask & configToCheck) == configToCheck;
}
你会这样称呼它:
int configChanges = activityInfo.configChanges;
boolean uiModeSet = isConfigSet(configChanges, ActivityInfo.CONFIG_UI_MODE);
boolean colorModeSet = isConfigSet(configChanges, ActivityInfo.CONFIG_COLOR_MODE);
// ...
除此之外我们还有什么办法可以得到activity.resizeMode
。
我明白这是@hide
api.
可靠地说,没有。尽管 Google 发布了一个博客文章 https://android-developers.googleblog.com/2018/02/improving-stability-by-reducing-usage.html最近声明如下:
从 Android 的下一个版本开始,一些非 SDK 方法和
字段将受到限制,因此您无法访问它们 - 或者
直接、通过反射或 JNI。
(无论如何,强烈建议不要通过反射访问隐藏字段)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)