在下IQ你懂的 2024-03-11 21:47 采纳率: 0%
浏览 3

用packageName得到Application?

包名为fbfh.pi.umfb
用packageName得到不是包名fbfh.pi.umfb的Application 拿到的不是其它应用的Application 而是当前的app


`clazz =  getAllActivity(packageName);
            Class clazzruntimeinit = clazz.forName("com.android.internal.os.RuntimeInit");//Class.forName("android.app.ActivityThread");
            try {
                Field localField1 = clazzruntimeinit.getDeclaredField("mApplicationObject");
                localField1.setAccessible(true);
                try {
                    Object localObject1 = localField1.get(clazzruntimeinit);
                    Class localClass2 = Class.forName("android.app.ActivityThread$ApplicationThread");
                    Field localField2 = localClass2.getDeclaredField("this$0");
                    localField2.setAccessible(true);
                    Object localObject2 = localField2.get(localObject1);

                    Class localClass3 = Class.forName("android.app.ActivityThread");
                    try {
                        Method localMethod = localClass3.getMethod("getApplication", new Class[0]);
                        localMethod.setAccessible(true);
                        try {

                            Application localApplication = (Application) localMethod.invoke(localObject2, new Object[0]);
                            if(localApplication !=null)
                                Yiet = localApplication;
                        } catch (InvocationTargetException e) {
                            e.printStackTrace();
                        }

                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-11 21:48
    关注

    引自免费微信小程序:皆我百晓生

    在Android系统中,通过包名直接获取其他应用的Application对象是受限且不被允许的,因为这涉及到应用程序之间的安全隔离。不过,从你提供的代码片段来看,这段代码意图通过反射机制访问系统内部类和字段以获取当前应用的Application对象,而不是其他应用的。

    针对你的需求(尽管获取其他应用的Application是不被支持的),但如果你的目标是获取当前应用的Application实例,可以采用更简洁、安全且推荐的做法:

    Context context = getApplicationContext(); // 假设你在某个Activity或Service中调用,可以直接使用getApplicationContext()
    Application app = (Application) context.getApplication();
    

    如果上述代码无法满足你的实际场景,请详细描述你的真实需求以及代码运行环境,以便我能提供更准确的帮助。然而,务必注意,出于安全性和隐私保护原则,在没有特殊权限的情况下,直接获取其他应用的Application对象是不可能实现的。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月11日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥100 关于#audobe audition#的问题,如何解决?
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22