在进行Android项目开发过程中,有很多公开的api方法可以直接调用,但是还有一部分api方法是hide的,如下所示:

android/app/PendingIntent.java:

/** * @hide * Return the Intent of this PendingIntent. */public Intent getIntent() {    try {        return ActivityManager.getService()            .getIntentForIntentSender(mTarget);    } catch (RemoteException e) {        throw e.rethrowFromSystemServer();    }}

我们是无法通过PendingIntent的实例来get这个方法的,这个时候就需要用到反射,直接上我的代码如下:

PendingIntent mPendingIntent = entry.contentIntent;try {     Class cls = PendingIntent.class;//首先还是必须得到这个对象的Class。     Method mGetIntent = cls.getDeclaredMethod("getIntent");//得到执行的method     mGetIntent.setAccessible(true);//设置访问权限//执行该Method.invoke方法的参数是执行这个方法的对象owner,和参数数组args,可以这么理解:owner//对象中带有参数args的method方法。返回值是Object,也既是该方法的返回值;//注:要调用的方法无参数,则invoke只传owner,不需要args数组,如下:     Intent mIntent = (Intent) mGetIntent.invoke(mPendingIntent);     ArrayList messages = (ArrayList) mIntent.getSerializableExtra(NimIntent.EXTRA_NOTIFY_CONTENT);     IMMessage mMessage = messages.get(0);           if(mMessage != null){               return mMessage;           }     } catch (NoSuchMethodException e) {                e.getStackTrace();     } catch (IllegalAccessException e){                e.getStackTrace();     } catch (InvocationTargetException e){                e.getStackTrace();     }

注意:getIntent是没有参数的,所以invoke方法中只有一个参数:要调用的方法所在的类实例:ower

有关反射的更详细内容,有兴趣可以查看:

https://blog.csdn.net/sinat_38259539/article/details/71799078

 

更多相关文章

  1. Android 中使用自定义字体的方法
  2. 半透明Activity方法
  3. Android开发由eclipse转Android Studio中一些常见出错问题解决方
  4. android摄像头采集和预览-第二种方法
  5. 使用WebView中的JavaScript调用Android方法
  6. H5 Web网页通过JS(JavaScript)脚本调用Android本地原生方法函数
  7. Android 中不弹出软键盘的方法
  8. android 静音方法

随机推荐

  1. Android与linux的区别与联系
  2. 三星揭幕之际,苹果高管再次炮轰Android和
  3. Android4开发入门经典 之 第一部分:Androi
  4. Android(安卓)中关于CheckBox、RadioButt
  5. Android(安卓)多线程-----AsyncTask详解
  6. 单挑苹果:Android系三剑客尚需时日?
  7. Android性能测试
  8. Google:Android将尝试兼容iPhone程序
  9. What is Android?
  10. Android随想