调用Android其它Context的Activity

转载 2013年12月06日 08:58:48
众所周知,如果想要在本Activity中调用其他应用程序的方法,通常使用AIDL实现。Activity一般不能自己直接new,直接new出来的缺少上下文Context。但是今日别人告诉我个Android隐藏方法,可以直接调用别的APP里Activity的方法……一下内容为转载:

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,代码如下:

  1. package chroya.demo;

  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.util.Log;

  5. class Main extends Activity {

  6. @Override
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. }

  10. public void print(String msg) {
  11. Log.d("Main", "msg:"+ msg);
  12. }
  13. }

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

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

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

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

Android获取其他包的Context,反射实现方法调用

Android中有Context的概念,想必大家都知道。Context可以做很多事情,打开activity、发送广播、打开本包下文件夹和数据库、获取classLoader、获取资源等等。如果我们得到了...
  • zhongwcool
  • zhongwcool
  • 2014年04月03日 11:10
  • 1295

Android Context与接口的强制类型转换问题

昨天在开发过程中遇到一个问题,困扰了很长时间,并且直到现在
  • u010665691
  • u010665691
  • 2014年11月04日 15:00
  • 2118

Android Context 上下文 你必须知道的一切

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40481055,本文出自:【张鸿洋的博客】本文大多数内容翻译自:http://ww...
  • lmj623565791
  • lmj623565791
  • 2015年01月05日 09:21
  • 163021

Android开发——告诉你Adapter应该写在Activity里面还是外面

0. 前言本文转载自AItsuki的博客。我先要说明一下我为什么要写这么一篇博客:最近看了一些其他人的项目,发现很多项目的做法是建立一个专门存放Adapter类的Package包,也有的项目干脆直接都...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年09月28日 19:38
  • 30316

Context都没弄明白,还怎么做Android开发?

Activity mActivity =new Activity() 作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语...
  • zuoan2008
  • zuoan2008
  • 2016年05月17日 09:17
  • 1248

android context参数 this 调用方法——菜瓜笔记

编写了一个类,该类的构造函数参数
  • hack8
  • hack8
  • 2014年05月17日 16:52
  • 1709

Android: 如何在Fragment中使用上下文Context

时间 2015-08-11 15:34:55  dss886的博客 原文  http://www.dss886.com/android/2015/08/11/01/ 主题 安卓开发 ...
  • qq_23621841
  • qq_23621841
  • 2015年08月11日 18:17
  • 8266

android全局获取Context对象(在静态函数中实现toast)

全局获取Context对象的意义: 当应用程序的架构逐渐复杂起来的时候,很多逻辑代码都将脱离Activity或者Service,但是如果此时你又恰恰需要使用Context,这个时候就需要用到全局获取...
  • Double2hao
  • Double2hao
  • 2015年11月20日 09:37
  • 4366

Android插件化开发 第四篇 [加载插件Activity]

引言上篇文章我们有介绍如何获取插件的Resource加载其资源,例子支持加载res文件夹下的素材资源例如动画、图片、布局、字符串等,本篇文章介绍宿主如何跳转到插件的Activity。跳转到插件的Act...
  • h3c4lenovo
  • h3c4lenovo
  • 2016年02月25日 17:00
  • 3569

Android Context 到底是什么?

什么是Context?一个Context意味着一个场景,一个场景就是我们和软件进行交互的一个过程。比如当你使用微信的时候,场景包括聊天界面、通讯录、朋友圈,以及背后的一些数据。那么从程序的角度来看,C...
  • rain_butterfly
  • rain_butterfly
  • 2015年12月16日 22:40
  • 2717
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:调用Android其它Context的Activity
举报原因:
原因补充:

(最多只允许输入30个字)