private void installAPK(File result) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
String uriString = "file:" + result.getAbsolutePath();
String type = "application/vnd.android.package-archive";
intent.setDataAndType(Uri.parse(uriString), type);
startActivityForResult(intent, REQUEST_CODE_INSTALL);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_INSTALL && resultCode == RESULT_CODE_CANCEL) {
//如果安装失败 返回主页面
goDelayedHomePage();
}else {
//安装成功
//TODO: 写一个Receiver
//接收系统安装APP完成的广播,根据包名来唤醒更新后的APP
}
}
Question 1 :
- 如何调用系统安装apk的Activity?
-
- 打开手机或者模拟器的SD卡,找一个apk文件,点击安装,停留在安装界面;
- 打开eclipse菜单栏中的window(如果没有,就选others,然后搜索window),在window界面可以看到当前和用户交互的Activity,而且会高亮显示;
- 拿到这个Activity之后,去Android源码中找到相应的包;
- 打开包的AndroidManifest文件,找到对应的Activity的意图过滤器;
- 在代码中new Intent(),匹配意图过滤器;
- 开启Activity
Question 2 :
- 如何获取系统Activity 返回的响应码?
-
- 和上面是同样的原理,打开apk安装界面;
- 在代码中写一个Log输出,或者打一个断点;
- 点击apk安装界面的安装/取消按钮,在断点或者Log中查看结果;
总结 :
- 很简单,想要获取系统的常量值,就去模拟系统执行的界面,在执行过程中,通过Log或者断点获取相应的常量的值,OK!