1、清单文件

android:sharedUserId="com.zyh.tplugin"

2、视图

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:id="@+id/ll"
  7. tools:context=".MainActivity" >
  8.  
  9. </LinearLayout>

3、java代码

  1. package com.itheimazyh.testplugin;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. import android.os.Bundle;
  9. import android.app.Activity;
  10. import android.content.Intent;
  11. import android.content.pm.PackageInfo;
  12. import android.content.pm.PackageManager;
  13. import android.graphics.Color;
  14. import android.view.Menu;
  15. import android.view.View;
  16. import android.view.View.OnClickListener;
  17. import android.widget.Button;
  18. import android.widget.LinearLayout;
  19. import android.widget.Toast;
  20.  
  21. public class MainActivity extends Activity {
  22. private LinearLayout ll;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27.  
  28. ll = (LinearLayout) findViewById(R.id.ll);
  29.  
  30. List<Map<String, Object>> plugins = new ArrayList<Map<String, Object>>();
  31. plugins = findPlugins();
  32. if(plugins.size() > 0){
  33. attachPlugin(plugins);
  34. }else{
  35. Toast.makeText(this, "没有相应的插件", 1).show();
  36. }
  37.  
  38. }
  39. private void attachPlugin(List<Map<String, Object>> plugins) {
  40. if(plugins.size() > 0){
  41. for(Map<String, Object> map : plugins){
  42. Button button = new Button(this);
  43. button.setTextColor(Color.RED);
  44. String label = (String) map.get("label");
  45. final String pkgName = (String) map.get("pkgName");
  46. button.setText(label);
  47.  
  48. ll.addView(button);
  49. button.setOnClickListener(new OnClickListener() {
  50. @Override
  51. public void onClick(View v) {
  52. Intent intent = new Intent();
  53. intent.setAction(pkgName);
  54. startActivity(intent);
  55. }
  56. });
  57. }
  58. }
  59. }
  60. private List<Map<String, Object>> findPlugins() {
  61. List<Map<String, Object>> plugins = new ArrayList<Map<String, Object>>();
  62. //包管理器
  63. PackageManager pm = this.getPackageManager();
  64. List<PackageInfo> installPackages = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);//获取所有安装的package包
  65. for(PackageInfo info : installPackages){
  66. String pkgName = info.packageName;
  67. String sharedUserId = info.sharedUserId;
  68. if(sharedUserId == null || !sharedUserId.equals("com.zyh.tplugin") || pkgName.endsWith(this.getPackageName())){
  69. continue;
  70. }
  71.  
  72. String label = (String) pm.getApplicationLabel(info.applicationInfo);
  73.  
  74. Map<String, Object> map = new HashMap<String, Object>();
  75. map.put("label", label);
  76. map.put("pkgName", pkgName);
  77. plugins.add(map);
  78. }
  79. return plugins;
  80. }
  81.  
  82. }

插件化-开启另外应用的activity的更多相关文章

  1. 小白也能看懂的插件化DroidPlugin原理(三)-- 如何拦截startActivity方法

    前言:在前两篇文章中分别介绍了动态代理.反射机制和Hook机制,如果对这些还不太了解的童鞋建议先去参考一下前两篇文章.经过了前面两篇文章的铺垫,终于可以玩点真刀实弹的了,本篇将会通过 Hook 掉 s ...

  2. 《Android插件化开发指南》面世

    本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...

  3. 基于Fragment的插件化

    --<摘自android插件化开发指南> 1.有些项目,整个app只有一个Activity,切换页面全靠Fragment,盛行过一时,但有点极端 2.Activity切换fragment页 ...

  4. 插件化框架解读之四大组件调用原理-Activity(三)上篇

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本文通过Activity调用原理来解读Replugin插件化技术 ...

  5. Android Small插件化框架解读——Activity注册和生命周期

    通过对嵌入式企鹅圈原创团队成员degao之前发表的<Android Small插件化框架源码分析>的学习,对Android使用的插件化技术有了初步的了解,但还是有很多需要认真学习的地方,特 ...

  6. 【Android开发学习笔记】【高级】【随笔】插件化——Activity生命周期

    前言 如同第一章我们说的,宿主程序通过 dexclassloader 将插件的类加载进来,然后通过反射去调用它的方法,这样Activity就被当成了一个普通的类来执行了,因此系统不再接管它的生命周期, ...

  7. 关于360插件化Replugin Activity动态修改父类的字节码操作

    近期在接入360插件化方案Replugin时,发现出现崩溃情况. 大概崩溃内容如下: aused by: java.lang.ClassNotFoundException: Didn't find c ...

  8. Activity插件化解决方案

    --摘自<android插件化开发指南> 1.宿主App加载插件中的类 2.最简单的插件化方案就是在宿主的androidmanifest.xml中申明插件中的四大组件 把插件dex合并到宿 ...

  9. [置顶] 滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理

    上周末,滴滴与360都开源了各自的插件化框架,VirtualAPK与RePlugin,作为一个插件化方面的狂热研究者,在周末就迫不及待的下载了Virtualapk框架来进行研究,本篇博客带来的是Vir ...

随机推荐

  1. HTML之表格与表单

    一.表格(table/tr/td) <table></table>表格 --不设高度 width:宽度.可以用像素或百分比表示. 常用960像素. border:边框,常用值为 ...

  2. eclipse修改默认工作空间

    新安装的myEclipse(eclipse)第一次启动时就会弹出让你选择工作空间的对话框 如果勾选了Use this as the default and do not ask again 下次要启动 ...

  3. setInterval(code, time)中code传递参数办法

    1.使用setInterval的场景 有时我们需要隔一定的时间执行一个方法,这时就会用到setInterval,但是由于这个方法是浏览器模拟出的Timer线程,在调用我们方法时不能为其传递参数. 2. ...

  4. this class is not key value coding-compliant for the key detailItem

    我出这个错误是因为,自己的一个视图没有给指定想用的viewController文件..及一个classController控制一个xib文件,忘给该视图指定控制器了.

  5. jQuery 子元素选择

    对于如下代码片段  如何对河meishi这个div的子DIV呢? <div id="vertical-Menu-meishi" class="J-nav-item& ...

  6. WebRTC–getUserMedia & Canvas

    下面是一个使用getUserMedia接口和Canvas的drawImage方法实现的截图功能(截取视频中的一帧). 基本思路是这样子的: getUserMedia获取一个MediaStream, s ...

  7. java实现电脑远程控制完整源代码(转)

    Java JDK1.4 的Robot对象,该对象可以完成屏幕图像截取操作,控制鼠标,键盘,如此便可以轻而易举地实现远程服务器的控制.本文向大家介绍如何用Java Robot对象实现远程服务器的控制,并 ...

  8. 数据结构——栈(Stacks)

    栈遵循LIFO ( last in first out) 即后入先出原则 栈结构类似于叠盘子 后叠上去的要先拿走 才能拿到下面的盘子 因此stack是一种访问受限的线性存储结构 用单向链表的结构来存储 ...

  9. 大Q品牌故事_大Q官网_腾讯旗下买卖宝公司倾力打造

    大Q品牌故事_大Q官网_腾讯旗下买卖宝公司倾力打造 走在大路上的改变者,有态度的互联网手机品牌

  10. IOS中Key-Value Coding (KVC)的使用具体解释

    kvc.键值编码,是一个非正式的协议.它提供一种机制来间接訪问对象的属性. 直接訪问对象是通过调用訪问器的方法实现,而kvc不须要调用訪问器的设置和获取方法.能够直接訪问对象的属性. 以下介绍一下kv ...