如何从 ActivityInfo class 获取 android:configChanges 值
How to get android:configChanges values from ActivityInfo class
我想获取设备中存在的所有包的活动信息(例如 configchanges、resizemode,如果支持画中画)。
我可以使用带有 GET_ACTIVITIES
标志的 PackageManager
获取活动信息。这样我就可以使用 ActivityInfo.configChanges
.
获得 configChanges
值
但是,如果 android:configChanges
中设置了多个配置值,则值 returns 是一个随机整数。
例如:
如果设置了以下值
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 中看到调试模式下的值。
以上任何 leads/help 都非常有用。
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.
靠谱,没有。您也许可以通过反射 API 访问它,尽管 Google 最近发布了一个 blog post 声明如下:
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.
(强烈建议不要通过反射访问隐藏字段)
我想获取设备中存在的所有包的活动信息(例如 configchanges、resizemode,如果支持画中画)。
我可以使用带有 GET_ACTIVITIES
标志的 PackageManager
获取活动信息。这样我就可以使用 ActivityInfo.configChanges
.
configChanges
值
但是,如果 android:configChanges
中设置了多个配置值,则值 returns 是一个随机整数。
例如:
如果设置了以下值
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 中看到调试模式下的值。
以上任何 leads/help 都非常有用。
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.
靠谱,没有。您也许可以通过反射 API 访问它,尽管 Google 最近发布了一个 blog post 声明如下:
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.
(强烈建议不要通过反射访问隐藏字段)