检查获取系统中特定的类名和方法

本文讨论了在OEM设备上检查特定系统类存在的方法,以确保在开发过程中能够正确调用Google提供的标准接口。通过创建自定义的检查函数,开发者可以避免因OEM厂商修改系统接口而导致的功能失效问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一篇我个人在EOE发的blog《检查获取系统中特定的类名和方法》,由于eoe的blog系统实在是无言以对,我就把eoe上面的帖子以及blog是都转到csdn上来,原帖地址:http://www.eoeandroid.com/blog-781265-49611.html


项目中遇到一个问题,在delete or save a contact 之后会发送Broadcaster来通知系统更新一些数据,而这个BroadcasterReceiver是google原生所提供的,正常情况下是存在,而且work的,但是一部分oem厂商把系统的一些标准接口改的乱七八糟的,导致一些正常的功能我们无法去调用或者使用,那么我们就需要再使用这个功能之前,去检查相应的类是否存在,存在之后再去执行我们的操作,code如下:


private static boolean checkReceiver(Context context) {
        try {
            Context otherContext = context.createPackageContext("com.android.phone",//com.android.phone是我们需要检查的类所在的包名
                    Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
            if (otherContext != null) {
                Class<?> clazz = otherContext.getClassLoader().loadClass(
                        "com.android.phone.CallerInfoCacheUpdateReceiver");// 我们需要检查的类的完整类路径
                if (clazz != null) {
                    Method method = clazz.getDeclaredMethod("onReceive", Context.class,
                            Intent.class);//通过反射拿到特定的方法,我这里只是为了检测是否是正确的类,但其实我们可以通过这些方法去invoke,然后达到更深的目的,具体不多说了
                    if (method != null) {
                        return true;
                    }
                }
            }
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        return false;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值