那么什么是远程context对象呢?
Activity有一个createPackageContext方法(实际上是ContextWrapper对象的,具体怎么样,可以查看Activity的集成树)
该方法的实际详情如下:
Context createPackageContext(String packageName,int flags) ,
通过该方法,可以按制定的packageName 和指定的创建方式,创建一个远程Context对象,然后利用此Context对象即可操作第三方应用的资源。
为了方便大家的理解,下面将以代码的形式展示一下具体的访问过程。
public static String PACKNAME_PATH = "XXX.XXX.XXX";
//目的访问路径,即需要创建远程context的目标路径
private boolean checkPathExist() {
PackageInfo packageInfo;
try {
packageInfo =this.getPackageManager().getPackageInfo(PACKNAME_PATH, 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
return packageInfo != null;

}
//下面为获取应用程序的片段
if(checkPathExist()){//当第三方应用程序存在
ContextremoteContext = null; //远程Context对象
try {
remoteContext =mContext.createPackageContext(PACKNAME_PATH,
Context.CONTEXT_IGNORE_SECURITY |Context.CONTEXT_INCLUDE_CODE);
//通过制定的路径,以忽略安全及包含代码的方式创建远程context对象
//mContext 为当前的Context对象
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // 忽略安全问题
LayoutInflater inflater =LayoutInflater.from(remoteContext);//初始化布局加载器
Resources resources =remoteContext.getResources();//获得远程资源对象管理器
//获得第三方应用的布局文件id
int resourceId = resources.getIdentifier("main","layout",PACKNAME_PATH);
//通过布局加载器和第三方应用的布局文件id创建view
View view = inflater.inflate(resourceId, null);
//为当前的应用程序创建view,此时,应用程序显示的界面,即是第三方应用的界面
setContextView(view);
}