- 在应用程序中安装程序需要权限
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
-
示例代码
安卓中提供了安装程序的功能,我们只要启动安装程序的Activity,并把我们的数据传入即可。
//获取到要安装的apk文件的File对象
File file = new File(Environment.getExternalStorageDirectory(), "test.apk");
//创建一个意图
Intent intent = new Intent();
//设置意图动作
intent.setAction(Intent.ACTION_VIEW); //android.intent.action.VIEW
//设置意图数据和类型
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
//启动安装程序的Activity
startActivity(intent);
Tip:
Uri.fromFile(File file)
方法能从一个File
对象得到它的Uri
Intent
有setData(Uri uri)
和setType(String type)
方法,但是这里如果我们分开写就会报错,
原因是setData()
方法在执行的时候会自动清空所有在此之前调用的setType
方法所设置过的type,
同样setType
方法在执行的时候也会自动清空所有在此之前调用setData
设置的Data
,所以这里必须使用setDataAndType
方法而不能分开使用setData
和setType
.Android
中提供了安装应用程序的功能,在Android
系统源码中apps/PackageInstaller
中。我们找到这个PackageInstaller
的清单文件,
然后找到PackageInstallerActivity
来查找该Activity
的意图:如下
android_source/packages/apps/PackageInstaller/AndroidManifest.xml
<activity android:name=".PackageInstallerActivity"
android:configChanges="orientation|keyboardHidden"
android:excludeFromRecents="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.INSTALL_PACKAGE" />
<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>
<intent-filter>
<action android:name="android.intent.action.INSTALL_PACKAGE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content" />
<data android:scheme="file" />
</intent-filter>
</activity>