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,还可以做很多事情,当然,题目所说的坏事,还是不要做为好。
http://chroya.iteye.com/blog/761441
分享到:
相关推荐
这个工程是使用activity-alias创建应用的别名的Deom,有需要的可以下载
androidx activity-1.2.3版本资源包
这是很据android-serialport-api 自己简化的一个demo ,可以使用。原来android-serial-api的程序很多人反映都不能使用,所以自己写了这个,只有一个activity,可以做为你的学习参考。
Android--开发--创建UI的新思路:用javascript与Activity进行交互
计划:一个半月 文章目录: 基础知识 1、Android01--搭建Android开发环境 2、Android02--认识Activity 3、Android03--Context和Application 4、Android04--Android服务 5、Android05--Android服务通信 6、Android06-...
android-start-activity.7z
AppCompatActivity - 添加一个应用 Activity 类,此类可作为使用支持库操作栏实现的 Activity 的基础类。 AppCompatDialog - 添加一个对话框类,此类可作为 AppCompat 主题对话框的基础类。 ShareActionProvider ...
Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题) - 夏安明的博客专栏 - 博客频道 - CSDN.NET
Android-DragDismissActivity:滑动取消Activity
ZXing Android Embedded Barcode scanning library for Android, using ZXing for decoding. The project is loosely based on the ZXing Android Barcode Scanner application, but is not affiliated with the ...
一个共享的开发框架,包含各种实用的BaseActivity
官方版本,亲测可用
sqlcipher-for-android-v3.2.0,anroid 数据库加密码,亲测可以用。 SQLiteDatabase.loadLibs(this); // MySqliteOpenHelper mySqliteOpenHelper=new MySqliteOpenHelper(DiagnosticsA3_Activity.this, "test.db", ...
利用Bundle实现Android Activity间消息的传递
TopActivity 展示当前app所处的最顶activity
Android-activity生命周期简单介绍,打好基础
Android-Activity之间数据传递的多种方式. 在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把常用的几种 方法都收集到了一起。它们各有利弊,有各自己的应用场景。
android,启动service,并且service把值传给Activity显示
这两个活动都有一个按钮,可用于在两个活动之间进行切换,并展示生命周期如何在每个活动中以及如何在两个活动之间进行切换时进行交互。背景: android活动的生命周期包括以下回调: onCreate() , onStart() , ...
Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...