由于想在程序里面更改系统的语言设置,查看了Settings中的源码后发现时这样实现的:
IActivityManager am = ActivityManagerNative.getDefault();
Configuration config = am.getConfiguration();
Loc loc = mLocales[position];
config.locale = loc.locale;
// indicate this isn't some passing default - the user wants this remembered
config.userSetLocale = true;
am.updateConfiguration(config);
// Trigger the dirty bit for the Settings Provider.
BackupManager.dataChanged("com.android.providers.settings");
后来写到自己的代码里后,发现 ActivityManagerNative 这个类找不到,网上查了资料,说
用ActivityManagerNative.getDefault()获得隐藏接口 IActivityManager的实例,但是在jar包中没有这个class文件,源码里却有对应的.java文件,网上也有人说 直接不管eclipse报编译时异常,最后扔到源码里面用linux编就行了。不知道大家都什么高见?
为了解决 更改系统的语言设置 我看到网上有人利用反射来实现的,具体代码如下:
try {
Class<?> activityManagerNative = Class.forName("android.app.ActivityManagerNative");
Log.i("amnType", activityManagerNative.toString());
Object am=activityManagerNative.getMethod("getDefault").invoke(activityManagerNative);
Log.i("amType", am.getClass().toString());
Object config=am.getClass().getMethod("getConfiguration").invoke(am);
Log.i("configType", config.getClass().toString());
config.getClass().getDeclaredField("locale").set(config, Locale.CHINA);
config.getClass().getDeclaredField("userSetLocale").setBoolean(config, true);
am.getClass().getMethod("updateConfiguration",android.content.res.Configuration.class).invoke(am,config);
}catch (Exception e) {
e.printStackTrace();
}
各位有什么好的想法和建议 别忘了留言告诉我啊,谢谢各位了!
分享到:
相关推荐
1. 第一步:ActivityManagerNative(AMN)在系统服务器端接收到启动App的请求,然后通过ActivityManagerProxy(AMP)将请求传递到应用程序的进程中。 2. 第二步:ActivityThread是应用程序的主线程,负责处理系统...
ActivityManagerNative amn = ActivityManagerNative.getDefault(); ActivityManager.RunningAppProcessInfo processInfo = new ActivityManager.RunningAppProcessInfo(); amn.getRunningAppProcesses(null).get...
ActivityManagerNative.getDefault().forceStopPackage(packageName); ``` 4. **源码解析**:在`ActivityManagerService`的`forceStopPackageLocked()`方法中,Android会遍历与包名关联的所有活动记录、服务记录...
在这个阶段中,SystemServer将调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager启动成功,ActivityManager将通过置变量mBooting通知它的另一个线程,该线程将发送广播android.intent....
源码中可能包含内存分析模块,通过Java层的Runtime类获取系统内存信息,然后调用System.gc()触发垃圾回收,或者使用ActivityManagerNative接口释放进程缓存。此外,可能会有自定义的内存优化算法,如优先级排序和...
4. **跨进程通信**:在`ActivityManagerNative.java`中,`ActivityManagerProxy.startActivity()`通过`IBinder.transact()`将所有数据跨进程传递给`ActivityManagerService`的`onTransact()`方法处理。这是通过...
入职两月有余,从之前的androidapp开发到现在的测试框架开发,工作中遇到很多问题,趁这次机会分享一下。 Android自动化测试目前可借鉴的经验不多,现在采取的方式就是通过java代码对Activity和View进行操作,目前...
- `execStartActivity()`通过`ActivityManagerNative.getDefault().startActivity()`调用`IActivityManager`接口的`startActivity()`方法。 - `IActivityManager`是接口,实际操作由`ActivityManagerNative`类的`...
当系统启动完成并进入正常状态后,System Server会通过`ActivityManagerNative.getDefault().systemReady()`方法通知Activity Manager服务已启动完毕。此时,Activity Manager会设置变量`mBooting`,并通知相关线程...
在这个场景下,我们可以反射调用`ActivityManagerNative.getDefault()`和`IActivityManager.updateConfiguration()`等方法来改变系统的配置,包括语言设置。以下是一个简单的示例: ```java public class ...
当SystemServer调用`ActivityManagerNative.getDefault().systemReady()`,ActivityManager会启动并通知另一线程,该线程负责处理开机自启动的第三方应用程序。这部分源码主要在`frameworks/base/services/java/...
本文将深入探讨Android App UI线程的工作原理、重要性以及如何优化其性能。 首先,理解Android UI线程的工作机制至关重要。当应用程序启动时,系统会创建一个主线程,该线程主要负责以下任务: 1. **渲染UI**:...
因此,为其他应用添加锁可能涉及到`android.permission.ACTIVITY_MANAGEMENT`或`android.permission.MANAGE_APP_PERMISSIONS`等敏感权限,这些权限通常只由系统应用拥有。开发者需要考虑如何在用户许可的情况下合理...
- 系统启动完成后,`SystemServer`会调用`ActivityManagerNative.getDefault().systemReady()`来通知`ActivityManager`,表明系统启动成功。`ActivityManager`会设置变量`mBooting`,并通知其内部的另一条线程。这...
当系统启动完成后,SystemServer会调用`ActivityManagerNative.getDefault().systemReady()`通知Activity Manager启动成功。此时,Activity Manager会通过设置变量`mBooting`,通知它的另一个线程发送`android....
任务管理器在Android中主要分为两部分:AppTask(应用任务)和ActivityManagerService(AMS)。AppTask负责管理应用程序的生命周期,而AMS则是系统服务,控制全局的活动管理,包括启动、停止、切换应用程序等。 ...
return (List) ActivityManagerNative.getDefault() .getServices(maxNum, 0); } catch (RemoteException e) { // System is dead, we will be dead too soon! return null; } } ``` 这段代码显示了`...
10. **Zygote接收连接**:在Zygote进程(通常是`/system/bin/app_process`)的`ZygoteInit`类中,`runSelectLoopMode()`等待socket连接,并在有连接时调用`ZygoteConnection.runOnce()`。 11. **处理子进程**:`...