android第三方应用apk安装和运行控制解决方案
2010-03-04 14:28
591 查看
最近在做android
的项目
,其实是边学边做.网上查了下资料
不多,但许多办法可以相互综合
需求:
要求让用户选择喜欢的第三方应用
下载
并通过自己的UI运行
关键问题:
(1) 可交互下载, 用户可取消,显示进度.................这个问题好解决
,有很多方式,如果不会可以联系我
(2) 安装apk
(3) 运行安装过的应用 ...... 怎样定位应用的Activity并激活 ( 如果是自己的activity
就好办了 )
解决方案
(1) 安装apk
直接贴出代码
就明白
Intent
intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File("/sdcard/1.apk")), "app
lication/vnd.android.package-archive");
startActivity(intent);
其中/sdcard/1.apk 就是要安装的apk,上面代码实际上是请求android的管理安装的activity
如果要强制安装过程,目前我还没有找到解决方法
(2)运行应用
首先android有一个PackageManager,这玩意功能
很强大,功能就和它的意思一样
假设:如果我们知道一个第三方Application的包的名称和Activity的名称,是否可以启动它的,答案当让市YES
启动代码:
PackageManager pm;
//初始化pm, 比如在activity里可以PackageManager pm = getPackageManager();
PackageInfo pi = pm.getPackageInfo("包的名称", PackageManager.GET_ACTIVITIES);
//PackageInfo 包含丰富的包的信息,这个'包的名称'是什么,在AndroidManifest.xml中有明确定义
// 比如 package="xxx.yyy.Portal.UI"
ActivityInfo ai=pi.activities[0]; // ActivityInfo 同样道理 他是 Activity的信息
//这里指向第一个包中的Activity, 大多数都是第一个Activity为启动Activity
if(ai==null) throw new Exception(pkg+"不包含任何Activity");
String sName=ai.name; //这里就得到Activity的类名了
启动它:
Intent intent = new Intent();
intent.setComponent(new ComponentName(pkg,sName));
parent.startActivity(intent);
(3)获得第三方应用的包名
只要有包名,就可以启动Activity了,但是不知道名字怎么办?
如果应用没有安装自然启动不了,只要安装了就有办法。
方法1 :
MyBroadcastReceiver myReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_INSTALL);
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addDataScheme("package");
registerReceiver(myReceiver, filter);
监视安装,在MyBroadcastReceiver的onReceive函数里
public void onReceive(Context arg0, Intent intent) {
String sPackageName=intent.getDataString(); //这个就是包名
}
也可以使用 AndroidManifest.xml配置来监视
方法2 :
枚举所有安装的应用,根据你自己的条件筛选
使用PackageManager的
public abstract List<PackageInfo> getInstalledPackages (int flags) 可以获得安装应用的列表
的项目
,其实是边学边做.网上查了下资料
不多,但许多办法可以相互综合
需求:
要求让用户选择喜欢的第三方应用
下载
并通过自己的UI运行
关键问题:
(1) 可交互下载, 用户可取消,显示进度.................这个问题好解决
,有很多方式,如果不会可以联系我
(2) 安装apk
(3) 运行安装过的应用 ...... 怎样定位应用的Activity并激活 ( 如果是自己的activity
就好办了 )
解决方案
(1) 安装apk
直接贴出代码
就明白
Intent
intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File("/sdcard/1.apk")), "app
lication/vnd.android.package-archive");
startActivity(intent);
其中/sdcard/1.apk 就是要安装的apk,上面代码实际上是请求android的管理安装的activity
如果要强制安装过程,目前我还没有找到解决方法
(2)运行应用
首先android有一个PackageManager,这玩意功能
很强大,功能就和它的意思一样
假设:如果我们知道一个第三方Application的包的名称和Activity的名称,是否可以启动它的,答案当让市YES
启动代码:
PackageManager pm;
//初始化pm, 比如在activity里可以PackageManager pm = getPackageManager();
PackageInfo pi = pm.getPackageInfo("包的名称", PackageManager.GET_ACTIVITIES);
//PackageInfo 包含丰富的包的信息,这个'包的名称'是什么,在AndroidManifest.xml中有明确定义
// 比如 package="xxx.yyy.Portal.UI"
ActivityInfo ai=pi.activities[0]; // ActivityInfo 同样道理 他是 Activity的信息
//这里指向第一个包中的Activity, 大多数都是第一个Activity为启动Activity
if(ai==null) throw new Exception(pkg+"不包含任何Activity");
String sName=ai.name; //这里就得到Activity的类名了
启动它:
Intent intent = new Intent();
intent.setComponent(new ComponentName(pkg,sName));
parent.startActivity(intent);
(3)获得第三方应用的包名
只要有包名,就可以启动Activity了,但是不知道名字怎么办?
如果应用没有安装自然启动不了,只要安装了就有办法。
方法1 :
MyBroadcastReceiver myReceiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_INSTALL);
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addDataScheme("package");
registerReceiver(myReceiver, filter);
监视安装,在MyBroadcastReceiver的onReceive函数里
public void onReceive(Context arg0, Intent intent) {
String sPackageName=intent.getDataString(); //这个就是包名
}
也可以使用 AndroidManifest.xml配置来监视
方法2 :
枚举所有安装的应用,根据你自己的条件筛选
使用PackageManager的
public abstract List<PackageInfo> getInstalledPackages (int flags) 可以获得安装应用的列表
相关文章推荐
- android第三方应用apk安装和运行控制解决方案
- android第三方应用apk安装和运行控制解决方案
- Android开发,在一个项目中调用(启用)已经安装的第三方apk应用软件
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
- Android程序打开第三方应用的一个解决方案
- androidstudio apk调试运行没有问题 apk安装运行闪退
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
- 安装android开发环境,并运行apk软件
- android APK无提示安装,以及无提示删除已安装应用
- Android应用管理四 -- APK包的安装、卸载和优化(PackageManagerService)
- 从android一个apk中启动第三方apk应用
- 【树莓派】在树莓派的Android系统中安装APK应用
- 获取 Android 设备上当前运行的应用的 apk
- android 应用升级 下载安装包 完成后 自动安装apk文件
- android开发:[1]如何安装apk应用到虚拟机
- 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
- 获取android已安装的应用PackageInfo启动第三方APP应用
- 拽android的apk文件到bat上即可安装应用的工具