zoukankan      html  css  js  c++  java
  • Android利用Java反射机制修改Android System Language

    private void updateLanguage(Locale locale) {
            try {
                Object objIActMag, objActMagNative;
                Class clzIActMag = Class.forName("android.app.IActivityManager");
                Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");
                Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault");
                // IActivityManager iActMag = ActivityManagerNative.getDefault();
                objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);
                // Configuration config = iActMag.getConfiguration();
                Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");
                Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);
                config.locale = locale;
                // iActMag.updateConfiguration(config);
                // 此处需要声明权限:android.permission.CHANGE_CONFIGURATION
                // 会重新调用 onCreate();
                Class[] clzParams = { Configuration.class };
                Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod(
                        "updateConfiguration", clzParams);
                mtdIActMag$updateConfiguration.invoke(objIActMag, config);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    参数从Local中获取,例如:Local.ENGLISH;

    使用之前应该root系统,adb shell

    ->su

    然后# pm grant com.example.clickdemo android.permission.CHANGE_CONFIGURATION手动赋予权限,否则会报反射异常

  • 相关阅读:
    kettle表输入条件参数设置
    batの磕磕碰碰
    bat调用kettle的job文件
    数组转换成字符串输出
    bat调用带参数存储过程
    读取属性文件
    剑指Offer——删除链表中重复的结点
    剑指Offer——链表中环的入口节点
    剑指Offer——两个链表的第一个公共节点
    剑指Offer——表示数值的字符串
  • 原文地址:https://www.cnblogs.com/mypsq/p/5757891.html
Copyright © 2011-2022 走看看