android程序共享activity实现插件化

来源:互联网 发布:mac键盘按键拆卸 编辑:程序博客网 时间:2024/06/18 16:58

上一篇我们演示了如何共享一个没有入口activity的程序,并将其中一个activity共享可被其他程序调用,调用方式如下:

Intent i = new Intent("com.example.plugin.MainActivity", Uri.parse("plugin://调用其他应用程序的Activity"));i.addCategory(Intent.CATEGORY_DEFAULT);startActivity(i);

这一篇我们以此为基础,演示下如何调用此activity。


应用打开后效果如上,当点击install时,我们安装已经放在sd卡上的apk文件,也就是对外提供activity调用的apk文件。点击卸载时,我们卸载这个apk程序。

点击start,将调用这个apk中共享的activity。运行效果如下:


安装,卸载,及调用其他程序共享出来的activity代码演示如下:

@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.install:String plugin = "Plugin.apk";String fileName = Environment.getExternalStorageDirectory() + "/" + plugin;Uri uri = Uri.fromFile(new File(fileName));Intent intent = new Intent(Intent.ACTION_VIEW);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setDataAndType(uri, "application/vnd.android.package-archive");startActivity(intent);break;case R.id.uninstall:Uri packageURI = Uri.parse("package:com.example.plugin");Intent intent2 = new Intent(Intent.ACTION_DELETE, packageURI);startActivity(intent2);break;case R.id.start:Intent i = new Intent("com.example.plugin.MainActivity", Uri.parse("plugin://调用其他应用程序的Activity"));i.addCategory(Intent.CATEGORY_DEFAULT);startActivity(i);break;default:break;}}

其中manifest文件需要声明以下权限:

    <permission android:name="android.permission.INSTALL_PACKAGES"></permission>    <permission android:name="android.permission.DELETE_PACKAGES"></permission>

如果我们在两个程序的manifest文件节点中声明属性android:sharedUserId="com.example.testuid"为同一个uid,方便在他们之间程序之间共享内存。

最好是使用相同的android:sharedUserId,插件可以方便的获取主应用的资源、数据库等等。


综合以上,我们可以由共享程序,调用程序实现插件化。由宿主程序统一管理(安装,删除,调用)插件。

原创粉丝点击