-
在应用程序中安装程序需要权限
<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>