我正在尝试在Android中进行一些操作,并且在尝试将另一个.apk中的类强制转换到我的界面时遇到了困扰.我在实现该接口的其他.apks中具有接口和各种类.我使用PackageManager的查询方法查找其他类,并使用Application#createPackageContext()获取该上下文的类加载器.然后,我加载该类,创建一个新实例,然后尝试将其强制转换为我确实可以实现的接口.
当我尝试强制转换时,它将引发类强制转换异常.我尝试了各种方法,例如先加载接口,使用Class#asSubclass等,但这些方法均无效. Class#getInterfaces()显示接口已实现.我的代码如下:
PackageManager pm = getPackageManager();
List lr = pm.queryIntentServices(new Intent("com.example.some.action"),0);
ArrayList list = new ArrayList();
for (ResolveInfo r : lr) {
try {
Context c = getApplication().createPackageContext(r.serviceInfo.packageName,Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
ClassLoader cl = c.getClassLoader();
String className = r.serviceInfo.name;
if (className != null) {
try {
Class> cls = cl.loadClass(className);
Object o = cls.newInstance();
if (o instanceof MyInterface) { //fails
list.add((MyInterface) o);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // some exceptions removed for readability
}
} catch (NameNotFoundException e1) {
e1.printStackTrace();
}
}