在系统安装的的底层常规应用中,是通过PackageInstaller来识别程序安装apk:
/**
* 安装apk
* @param file
*/
private void install(File file){
//激活系统的安装组件
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
//设置数据和数据类型
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
finish();
startActivity(intent);
}
PackageInstaller服务将会在内部匹配MIME类型为application/vnd.android.package-archive的intent,要说明的是setDataAndType的参数第一个为:URI,其实URI内部的String对应为file://加上常规路径,比如:file:///sdcard/test.apk,当然其他的Uri构造方法还可以Uri.fromFile(new File(mFileFullPath)).
底层PackageInstallerActivity在配置文件中是这样配置的:
<activity android:name=".PackageInstallerActivity">
<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>
有篇文章讲的和很深入http://www.2cto.com/kf/201403/285212.html;
通过代码卸载一个apk:
<activity android:name=".UninstallerActivity">
<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>