gpt4 book ai didi

android - 如何获取android :configChanges values from ActivityInfo class

转载 作者:行者123 更新时间:2023-11-29 01:02:31 33 4
gpt4 key购买 nike

我想获取设备中存在的所有包的 Activity 信息(例如 configchanges、resizemode,如果支持画中画)。

我可以使用带有 GET_ACTIVITIES 标志的 PackageManager 获取 Activity 信息。这样我就可以使用 ActivityInfo.configChanges 获取 configChanges 值。

但是,如果在 android:configChanges 中设置了多个配置值,该值将返回一个随机 int。

例如:

如果设置了以下值

android:configChanges="uiMode|smallestScreenSize|locale|colorMode|density"

使用以下代码获取 configchanges 值

PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);

ActivityInfo activityInfo[] = packageInfo.activities;

if(activityInfo!=null) {
for(ActivityInfo activity : activityInfo) {
int configChange = activity.configChanges;
}
}

我得到 activity.configChanges 值为 23047

23047 表示什么,我如何解码它以便我可以获得 AndroidManifest.xml 中设置的配置值

除此之外,我们还有任何方法可以获得 activity.resizeMode 。我明白这是@hide api。尽管在 Android Studio 中,我可以看到 Debug模式下的值。

以上任何线索/帮助都将非常有用。

最佳答案

configChanges 是位掩码。

要检查给定位是否已设置,您只需使用适当的 bitwise operator .

例如,要检查是否设置了 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);
// ...

In Addition to that is there any way we can get activity.resizeMode . I understand that it is @hide api.

可靠的是,没有。尽管 Google 发布了 blog post,您也许可以通过反射 API 访问它。最近声明如下:

Starting in the next release of Android, some non-SDK methods and fields will be restricted so that you cannot access them -- either directly, via reflection, or JNI.

(强烈建议不要通过反射访问隐藏字段)

关于android - 如何获取android :configChanges values from ActivityInfo class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50127593/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com