`
jaymsimusic
  • 浏览: 94343 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

关于android.app.ActivityManagerNative

阅读更多
由于想在程序里面更改系统的语言设置,查看了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 楼 tztrue 2011-08-02  
可以把Linux下生成的jar包进行打包整合,默认情况下生成的SDK用的jar包不包含隐藏类,热后把整合的jar包以System Library的方式加入Project Build Path,删除默认的andorid sdk中jar包就可以了,比在Liunx下面方便。

相关推荐

    给App开发人员讲点Android底层知识.pptx

    1. 第一步:ActivityManagerNative(AMN)在系统服务器端接收到启动App的请求,然后通过ActivityManagerProxy(AMP)将请求传递到应用程序的进程中。 2. 第二步:ActivityThread是应用程序的主线程,负责处理系统...

    Android获取应用程序的包大小\缓存大小\数据大小

    ActivityManagerNative amn = ActivityManagerNative.getDefault(); ActivityManager.RunningAppProcessInfo processInfo = new ActivityManager.RunningAppProcessInfo(); amn.getRunningAppProcesses(null).get...

    安卓Android源码——强行结束APP进程的方法.zip

    ActivityManagerNative.getDefault().forceStopPackage(packageName); ``` 4. **源码解析**:在`ActivityManagerService`的`forceStopPackageLocked()`方法中,Android会遍历与包名关联的所有活动记录、服务记录...

    Android开机启动流程.doc

    在这个阶段中,SystemServer将调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager启动成功,ActivityManager将通过置变量mBooting通知它的另一个线程,该线程将发送广播android.intent....

    Android手机管家源码.rar

    源码中可能包含内存分析模块,通过Java层的Runtime类获取系统内存信息,然后调用System.gc()触发垃圾回收,或者使用ActivityManagerNative接口释放进程缓存。此外,可能会有自定义的内存优化算法,如优先级排序和...

    android应用的启动流程

    4. **跨进程通信**:在`ActivityManagerNative.java`中,`ActivityManagerProxy.startActivity()`通过`IBinder.transact()`将所有数据跨进程传递给`ActivityManagerService`的`onTransact()`方法处理。这是通过...

    Android系统自动化测试简述

    入职两月有余,从之前的androidapp开发到现在的测试框架开发,工作中遇到很多问题,趁这次机会分享一下。  Android自动化测试目前可借鉴的经验不多,现在采取的方式就是通过java代码对Activity和View进行操作,目前...

    Android APP启动方式、启动流程及启动优化分析

    - `execStartActivity()`通过`ActivityManagerNative.getDefault().startActivity()`调用`IActivityManager`接口的`startActivity()`方法。 - `IActivityManager`是接口,实际操作由`ActivityManagerNative`类的`...

    Android开机启动流程.docx

    当系统启动完成并进入正常状态后,System Server会通过`ActivityManagerNative.getDefault().systemReady()`方法通知Activity Manager服务已启动完毕。此时,Activity Manager会设置变量`mBooting`,并通知相关线程...

    Android实现系统语言切换功能

    在这个场景下,我们可以反射调用`ActivityManagerNative.getDefault()`和`IActivityManager.updateConfiguration()`等方法来改变系统的配置,包括语言设置。以下是一个简单的示例: ```java public class ...

    Android系统启动分析.pdf

    当SystemServer调用`ActivityManagerNative.getDefault().systemReady()`,ActivityManager会启动并通知另一线程,该线程负责处理开机自启动的第三方应用程序。这部分源码主要在`frameworks/base/services/java/...

    对Android App UI线程的一点理解

    本文将深入探讨Android App UI线程的工作原理、重要性以及如何优化其性能。 首先,理解Android UI线程的工作机制至关重要。当应用程序启动时,系统会创建一个主线程,该线程主要负责以下任务: 1. **渲染UI**:...

    Android项目源码给其他应用加锁的程序锁源代码

    因此,为其他应用添加锁可能涉及到`android.permission.ACTIVITY_MANAGEMENT`或`android.permission.MANAGE_APP_PERMISSIONS`等敏感权限,这些权限通常只由系统应用拥有。开发者需要考虑如何在用户许可的情况下合理...

    Android_开机启动流程

    - 系统启动完成后,`SystemServer`会调用`ActivityManagerNative.getDefault().systemReady()`来通知`ActivityManager`,表明系统启动成功。`ActivityManager`会设置变量`mBooting`,并通知其内部的另一条线程。这...

    Android开机流程

    当系统启动完成后,SystemServer会调用`ActivityManagerNative.getDefault().systemReady()`通知Activity Manager启动成功。此时,Activity Manager会通过设置变量`mBooting`,通知它的另一个线程发送`android....

    应用源码任务管理器源码.zip

    任务管理器在Android中主要分为两部分:AppTask(应用任务)和ActivityManagerService(AMS)。AppTask负责管理应用程序的生命周期,而AMS则是系统服务,控制全局的活动管理,包括启动、停止、切换应用程序等。 ...

    Activity_Manager框架解析

    return (List) ActivityManagerNative.getDefault() .getServices(maxNum, 0); } catch (RemoteException e) { // System is dead, we will be dead too soon! return null; } } ``` 这段代码显示了`...

    Activity启动流程

    10. **Zygote接收连接**:在Zygote进程(通常是`/system/bin/app_process`)的`ZygoteInit`类中,`runSelectLoopMode()`等待socket连接,并在有连接时调用`ZygoteConnection.runOnce()`。 11. **处理子进程**:`...

Global site tag (gtag.js) - Google Analytics