Delphi XE7 调用外部APP activity
procedure TForm2.btn2Click(Sender: TObject); var oIntent:JIntent; pkg,cls:JString; begin pkg := StringToJString('com.song.cleaner'); cls := StringToJString('com.song.cleaner.CleanerActivity'); oIntent := TJIntent.Create; oIntent.setAction(TJIntent.JavaClass.ACTION_VIEW); //这里可以改为 ACTION_MAIN ,但是,我不知道为什么。。。 // oIntent.setPackage(pkg); //可有可无, oIntent.setClassName(pkg,cls); //调用另一个app,即调用外部app,就用setClassName oIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); oIntent.addCategory(TJIntent.JavaClass.CATEGORY_LAUNCHER); //没有该代码,一样可以正常运行。 // oIntent.setClass(SharedActivityContext,SharedActivityContext.getClass); //如果调用自己的话,就用setClass SharedActivity.startActivity(oIntent); end;
我在模拟器第1次运行以上代码的时候,弹出
android.content.ActivityNotFoundException: Unable to find explicit activity class
have you declared this activity in your AndroidManifest.xml
当我安装了清理大师,即com.song.cleaner_1_234459.apk 就没有错误提示了,之后,我又删除了清理大师app,错误还是没有提示,奇怪啊。。。。
上面的包名和类名是我用反编译工具 Androidfby 解压出来的。查看com.song.cleaner_1_234459.apk的配置文件 AndroidManifest.xml 可以获取包名,类名。
看这某篇文章的摘要:
Android系统中,也有一个类似注册表的东西,用来记录当前所有安装的应用的基本信息,每次系统安装
或者卸载了任何apk文件,都会更新这个文件。这个文件位于如下目录:
/data/system/packages.xml
系统在安装apk的过程中,会解析apk的AndroidManifinest.xml文件,提取出这个apk的重要信息写入到
packages.xml文件中,这些信息包括:权限、应用包名、APK的安装位置、版本、userID等等。
另外,关于 Delphi XE7 开发移动的案例代码真的非常少,多数都是看java的案例+理解 写出来的 -_-! 既然这样,还不如学java语言算了。。。
附上学习资源,这批资料里没有一个是Delphi的,晕
Android跨应用Activity跳转
http://blog.csdn.net/shb2058/article/details/60869339 //用到的是 setClassName
Android从一个APP跳转到另一个APP主界面
http://blog.csdn.net/hust_twj/article/details/73477454 //用到的是 ComponentName
android-Intent启动activity的几种方式-隐式Intent
http://blog.csdn.net/daiyelang/article/details/8649134
幸好盒子论坛还可以找到Delphi的案例,还有大富翁论坛
http://bbs.2ccc.com/topic.asp?topicid=474485
android.intent.category.LAUNCHER的作用
http://blog.csdn.net/dajian790626/article/details/13512499 //这篇文章有用啊。
Delphi XE6开发的AndRoid应用实现在线升级完成后自动安装apk代码(加说明)