Android--------从一个包中的Avtivity创建另外另外一个包的Context

http://androidstudy.iteye.com/blog/827931

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 {

	@Override
	public 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,还可以做很多事情,当然,题目所说的坏事,还是不要做为好。

时间: 2024-12-04 02:36:18

Android--------从一个包中的Avtivity创建另外另外一个包的Context的相关文章

android如何在activity 中启动和创建一个widget?

问题描述 如题android如何在activity 中启动和创建一个widget? 问题补充:飞雪无情 写道 解决方案 要是在activity创建一个桌面上的widget的话 我试过是不行的.但是可以实现widget里创建一个activity.解决方案二:dialog也是一种widget,都差不多的.按你说的这个意思就是编程的方式了,不用xml 布局文件,你可以这样写public class HelloAndroid extends Activity { /** Called when the

代码-问一个win32application中,我创建了对话框,

问题描述 问一个win32application中,我创建了对话框, 在对话框中我拖进去编辑框控件,问题是如何使用编辑框,得到输进去的数字求求各位高手了,最好有具体代码,感激不尽!!! 解决方案 用GetDlgItem获取编辑框窗口句柄,用GetWindowText获取编辑框内容,用atoi等函数将字符串转换成整数或者用 GetDlgItemInt 解决方案二: 直接用GetDlgItemInt就可以了.不需要什么"G?e?t?DlgItem获取到控件,然后GetWindowText获取控件文本

android-Android中怎么把一个方法中的值传递到另一个方法中

问题描述 Android中怎么把一个方法中的值传递到另一个方法中 如下 public final Handler viewHandler = new Handler() {...........................};假设这里面有一个值要传递到 public void initViews() { .'''''''''''}:这里面 请大神指教 解决方案 为你想传入的那个方法添加传入数据类型的参数,然后在后一个方法中处理传入的数据,调用此方法的时候就可以传值了 public void

把一个数据库中的数据导入到另一个数据库中

问题描述 把一个数据库中的数据导入到另一个数据库中.我写java程序 要建立两个数据库连接.有木有好点的办法.数据交换解决不了我的问题,我这里有逻辑处理.急啊. 问题补充:Rainbow702 写道 解决方案 ① 与数据库A建立连接② 从A取得数据③ 处理这些数据④ 与数据库B建立连接⑤ 将处理后的数据插入B中解决方案二:如果数据库类型一样,字段一样,直接用数据库备份工具就可以了,方便快捷解决方案三:引用这样的话就要创建两个conn对象.会不会出现问题为什么会出问题呢?你把你获取 conn 的方

jaxb 关于如何把一个list中的对象放入另一个list中的注释问题

问题描述 jaxb 关于如何把一个list中的对象放入另一个list中的注释问题 最近用jaxb做项目,需要与其他外部系统做交互.不知道对方xml格式,所以准备不管对方给我什么样的格式,按照我自己的格式走.那么假如:他的c根节点包含两个子节点c1.c2.同时c1又包含三个c11.c12.c13. c2包含两个c21.c22.那么如果我想让c13放入c2中,该如何写jaxb注释

android 模拟器 4 4-Eclipse中如何何创建一个AVD

问题描述 Eclipse中如何何创建一个AVD Eclipse中如何何创建一个AVD 貌似我这台电脑无法创建一个AVD 是不是没有安卓intel hawk cpu驱动程序 解决方案 首先你需要用sdk manager下载对应的系统镜像,(当然,天朝的GW之下,你还是直接去镜像站下好包,直接归档得了),然后运行avd manager去创建模拟器,高版本的基本有arm的x86的...建议你用arm的,虽然慢一点,其他的都是要硬件支持的.当然,调试还是以真机为主的. 解决方案二: 是不是创建AVD时,

android studio-Android Studio widget中的组件找不到导包需要手动输入

问题描述 Android Studio widget中的组件找不到导包需要手动输入 像图中一样,简单的View都不自动导包了,需要手动输入,上面那个GridView是手动输入的,定义组件都只提示v7和v4中的类 解决方案 好了,是不小心在auto import中exclude from import and Completion加入了android.widget,然后这个包中的类都被忽略了

activity-不设置一个位置从另一个Activity中启动 Google Navigation

问题描述 不设置一个位置从另一个Activity中启动 Google Navigation 不设置一个位置如何开启 google 导航?当我试着实现这个功能时,它实际上是运行 Google Navigation ,但是只重启Activity.事实上我想实现当点击一个主屏幕的 Navigation,就能运行.我使用下面的intent: Intent i = new Intent(Intent.ACTION_VIEW); i.setClassName(""com.google.androi

java-给HTTP链接的一个字符串中删除空白

问题描述 给HTTP链接的一个字符串中删除空白 我想发送一个查询的url: String url = String.format( "http://xxxxx/xxx/xxx&message=%s",myEditBox.getText.toString()); // Create a new HttpClient and Post Header DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost ht