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
分享到:
相关推荐
Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...
Activity类位于`android.app`包中,从`java.lang.Object`派生,并依次继承了`android.content.Context`、`android.app.ApplicationContext`,最终成为具有用户交互功能的顶级窗口。 1. **Activity的创建方式**: -...
这样,Android会自动为这个视图创建一个过渡动画。 此外,我们还可以使用`Transition`类来自定义过渡动画。例如,使用`Fade`、`Slide`或者`ChangeBounds`等预定义的过渡,或者创建自定义的`Transition`。这些过渡...
在Android系统中,`content`包是一个至关重要的组成部分,它主要负责内容提供者的实现和管理。内容提供者(Content Provider)是Android应用间数据共享的关键机制,使得不同应用程序能够访问和操作其他应用的数据,...
在Android开发中,有时我们需要将特定的功能模块,如一个Activity,封装成独立的jar包,以便第三方应用可以方便地调用。这样的做法有利于代码重用,降低开发成本,并且能够提高软件的模块化程度。本篇文章将深入探讨...
总之,将Android的Activity打成jar包供第三方调用是一个既实用又复杂的任务。通过合理的架构设计和精细的技术实现,不仅能够提升代码的复用性和项目的灵活性,还能有效促进跨团队协作,加快开发周期。
Context是一个抽象类,位于`android.content`包中,它提供了访问应用程序资源(如字符串、颜色、布局等)、启动Activity、启动或停止Service、发送广播等操作的接口。它是Android组件(如Activity、Service、...
首先,Android提供了`Context.createPackageContext()`方法来创建一个特定包的Context实例。这个方法接收两个参数:`packageName`,即你想要获取Context的包名;`flags`,用于设置一些行为标志。常见的标志位有`...
接下来,你需要创建一个包含`ViewPager`的布局文件,例如`viewpager_layout.xml`。在这个布局文件中,你会看到一个`LinearLayout`,其中包含一个`ViewPager`组件。`ViewPager`的宽度和高度都设置为`fill_parent`,...
一般会将ZIP文件解压到应用的私有缓存目录,然后使用`Context`的`createPackageContext()`方法创建一个新的上下文,该上下文可以指向解压后的资源目录。这样,新的主题资源就会被系统识别并应用。 4. **代码实现**...
总的来说,理解和掌握这些包结构以及它们提供的功能,对于一个Android开发者来说是必要的,因为它们构成了Android应用开发的基本框架。通过熟练运用这些组件和接口,开发者可以构建出功能丰富、用户体验良好的...
apk 是 Android 包的扩展名,一个 Android 包包含了与某个 Android 应用程序相关的所有文件,apk 文件将 AndroidManifest.xml 文件、应用程序代码(dex 文件)、资源文件和其他文件组成一个压缩包,一个项目只能打包...
**步骤一**:创建一个新的Android工程,命名为"Viewpager"。 **步骤二**:导入必要的库。在项目中添加v4支持库,通常这个库已经包含在Android Studio的新建项目中,但如果你是从旧版本迁移或者手动创建,可以通过...
以下是一个完整的实例代码,展示了如何在一个Android应用中动态加载并调用来自外部jar包的方法: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle ...
此外,还需要创建一个名为 `device_filter.xml` 的文件来定义感兴趣的 USB 设备特征: ```xml <resources xmlns:android="http://schemas.android.com/apk/res/android"> <usb-device android:vendor-id="VENDOR_...
本文实例讲述了Android activity的生命周期。...几乎所有的activity都要和用户打交道,所以activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上,当 activ
3. **包与类加载器**:Android应用的类组织在不同的包中,逆向工程师需了解如何查找并解析这些包内的类。Android的类加载机制,如DexClassLoader,对于理解类的加载过程和可能的篡改点至关重要。 4. **Android API*...
当tag被检测到时,系统会创建一个Tag对象,并封装到Intent中,然后通过`startActivity()`发送给注册了相应Intent过滤器的Activity。Tag对象可以使用`getTechList()`获取其支持的技术列表,以便进一步操作。 2. **...
- **File类**:File类是Java.io包中的一个基础类,用于表示文件和目录路径名的抽象表示。在Android中,我们同样可以使用这个类来操作文件。 - **内部存储**:Android设备上的内部存储空间是私有的,只能被应用本身...