Câu trả lời ở trên là dành cho pre-API-24.
Nếu mục tiêu ứng dụng của bạn API 24 trở lên (và cần), bạn cần phải sử dụng cái gì khác (nếu không bạn có được FileUriExposedException, như mô tả here):
File apkFile = new File(...);
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri fileUri = android.support.v4.content.FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", apkFile);
intent.setDataAndType(fileUri, "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
provider_paths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!--<external-path name="external_files" path="."/>-->
<external-path path="Android/data/YOUR_PACKAGE_NAME" name="files_root" />
<external-path path="." name="external_storage_root" />
</paths>
trong đó YOUR_PACKAGE_NAME là tên gói ứng dụng của bạn.
manifest:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
Nguồn
2016-12-02 15:57:03
này sẽ không có tác dụng nữa, nếu mục tiêu ứng dụng của bạn API 24 trở lên. Xem câu trả lời của tôi bên dưới –