? ? ? ? ? this should work:?需求:
? ?要求让用户选择喜欢的第三方应用?下载?并通过自己的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) 可以获得安装应用的列表。apk安装及卸载的原理及代码
Java:
intent.setDataAndType(Uri.fromFile(new?File(fileName)),?"application/vnd.android.package-archive");?
startActivity(intent);
that's because intent filter is:?XML:
? ? ? ? ? ??<intent-filter>?
? ? ? ? ? ? ? ??<action?android:name="android.intent.action.VIEW"?/>?
? ? ? ? ? ? ? ??<category?android:name="android.intent.category.DEFAULT"?/>?
? ? ? ? ? ? ? ??<data?android:scheme="content"?/>?
? ? ? ? ? ? ? ??<data?android:scheme="file"?/>?
? ? ? ? ? ? ? ??<data?android:mimeType="application/vnd.android.package-archive"?/>?
? ? ? ? ? ??</intent-filter>?
? ? ? ??</activity>
intent filter for uninstallation:?XML:
? ? ? ? ? ??<intent-filter>?
? ? ? ? ? ? ? ??<action?android:name="android.intent.action.VIEW"?/>?
? ? ? ? ? ? ? ??<action?android:name="android.intent.action.DELETE"?/>?
? ? ? ? ? ? ? ??<category?android:name="android.intent.category.DEFAULT"?/>?
? ? ? ? ? ? ? ??<data?android:scheme="package"?/>?
? ? ? ? ? ??</intent-filter>?
? ? ? ??</activity>
详细解决方案
android第三方施用apk安装和运行控制解决方案[转]
热度:82 发布时间:2016-05-01 16:23:43.0
Intent intent =?new?Intent(Intent.ACTION_VIEW);?
? ? ? ?<activity?android:name=".PackageInstallerActivity">?
? ? ? ?<activity?android:name=".UninstallerActivity">?
相关解决方案
- xml/xslt 变量自增。解决方案
- DB2 调用java自定义方法报错,请大牛帮忙~解决方案
- 关于request.getParameterValues()解决方案
- 一个JSP页面,在NETBEANS里报错!解决方案
- WEB环境javamail取不到pop3邮件,解决方案
- 急来者有分,晚了就没了!解决方案
- disable在IE8中可以接收焦点了?解决方案
- 求网页采集器的正则表达式。解决方案
- 关于FckEdit。解决方案
- 在Struts2 如果有多个拦截器栈顺序写错会有什么不同?解决方案
- servlet+jquery1.4.2(ajax error?)解决方案
- 关于el 《c:if》。解决方案
- jsp、taglib、velocity、freemarker等都过时了吗?解决方案
- 有开发过CA认证的朋友,帮个忙!解决方案
- com.microsoft.sqlserver.jdbc.SQLServerException: 列名 n_id 无效。解决方案
- java 缓冲区读写操作,求解?解决方案
- EXTJS中treepanel树内部机制?解决方案
- 一个数学题,求个算法。解决方案
- java 大文件上传?解决方案
- 从JSP中得到访问者的真实IP(很急)!解决方案
- 高分求解!解决方案
- java可以跟PHP对接吗?解决方案
- 有什么办法在JSP页面在不使用<%%>情况下 使用数学函数Math.floor()解决方案
- 在JSP页面调用JavaBean,出错!初学!求指导!解决方案
- 简单的更改记录的语句?解决方案
- JS方法内取的值是false,给方法传递的值却是正确的,请高手指教。解决方案
- 求教各位大神,初学JSP看什么书比较好呢?新一点的。解决方案
- java调用so,解决方案
- MyEclipse怎样运行applet程序?解决方案
- JPA到底是神马?解决方案