Android中有Context的概念,想必大家都知道。Context可以做很多事情,打开activity、发送广播、打开本包下文件夹和数据库、获取classLoader、获取资源等等。如果我们得到了一个包的Context对象,那我们基本上可以做这个包自己能做的大部分事情。

那我们能得到吗?很高兴的告诉你,能!
Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。


这个方法有两个参数:
1。packageName 包名,要得到Context的包名
2。flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。


下面给个小例子,执行另外一个包里面的某个类的方法。
另外一个包的包名是chroya.demo,类名Main,方法名print,代码如下:

package chroya.demo;import android.app.Activity;import android.os.Bundle;import android.util.Log;class Main extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}public void print(String msg) {Log.d("Main", "msg:"+ msg);}}

本包的调用Main的print方法的代码块如下:

Context c = createPackageContext("chroya.demo", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);//载入这个类Class clazz = c.getClassLoader().loadClass("chroya.demo.Main");//新建一个实例Object owner = clazz.newInstance();//获取print方法,传入参数并执行Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello");

ok,这样,我们就调用了chroya.demo包的Main类的print方法,执行结果,打印出了Hello。

怎么样,这只是一个调用其他包的代码的例子,我们获取到Context,还可以做很多事情,当然,题目所说的坏事,还是不要做为好。

更多相关文章

  1. Android中使用apache commons-net发送后台邮件的方法
  2. Android音频播放
  3. Android之Bundle传递数据详解与实例及Bundle与SharedPreferences
  4. android集成友盟推送,点击通知,先启动应用,然后再跳指定 界面;应用前
  5. Android(安卓)ProGuard代码混淆
  6. Android(安卓)和jsp登录接口
  7. ListView设置分割线颜色
  8. Android(安卓)中点击两次返回键才退出
  9. ADB 自制万用驱动方法,解决找不到驱动问题,独家秘笈

随机推荐

  1. viewpager、listview、gridview、scrollv
  2. android 指纹验证api
  3. android
  4. Full glib porting onto Android
  5. Android(安卓)调用Gmail发送邮件
  6. android 判断网络是否连接
  7. Android(安卓)SDK 源代码编译
  8. Android:HttpURLConnection使用,Tomcat的S
  9. android 堆栈调试方法
  10. android 下载程序