【问题标题】:How to get android:configChanges values from ActivityInfo class如何从 ActivityInfo 类中获取 android:configChanges 值
【发布时间】:2018-05-02 05:22:48
【问题描述】:

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

我可以使用带有GET_ACTIVITIES 标志的PackageManager 获取活动信息。有了它,我可以使用ActivityInfo.configChanges 获得configChanges 值。

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

例如:

如果设置了以下值

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 中看到调试模式下的值。

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

【问题讨论】:

    标签: android android-activity android-manifest android-package-managers


    【解决方案1】:

    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);
    // ...
    

    除此之外,我们还有什么方法可以得到 activity.resizeMode 。 我知道是@hide api。

    可靠,不。尽管 Google 最近发布了 blog post 声明如下:

    您也许可以通过反射 API 访问它:

    从 Android 的下一个版本开始,一些非 SDK 方法和 字段将受到限制,因此您无法访问它们——要么 直接,通过反射或 JNI。

    (无论如何,强烈建议不要通过反射访问隐藏字段)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      相关资源
      最近更新 更多