diff --git a/README.md b/README.md
index 63b1cf0..0f64971 100644
--- a/README.md
+++ b/README.md
@@ -74,11 +74,24 @@ Notes
- For properly opening _any_ file, you must already have a suitable reader for that particular file type installed on your device. Otherwise this will not work.
-
- [It is reported](https://github.com/pwlin/cordova-plugin-file-opener2/issues/2#issuecomment-41295793) that in iOS, you might need to remove `` from your `config.xml`
- If you are wondering what MIME-type should you pass as the second argument to `open` function, [here is a list of all known MIME-types](http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=co)
+Android APK installation limitation
+---
+The following limitations apply when opening an APK file for installation:
+- On Android 8+, your application must have the `ACTION_INSTALL_PACKAGE` permission. You can add it by adding this to your app's `config.xml` file:
+```
+
+
+
+
+
+```
+
+- Before Android 7, you can only install APKs from the "external" partition. For example, you can install from `cordova.file.externalDataDirectory`, but **not** from `cordova.file.dataDirectory`. Android 7+ does not have this limitation.
+
Additional Android Functions
---
The following functions are available in Android platform:
diff --git a/src/android/io/github/pwlin/cordova/plugins/fileopener2/FileOpener2.java b/src/android/io/github/pwlin/cordova/plugins/fileopener2/FileOpener2.java
index 541d5e4..d4b2fff 100644
--- a/src/android/io/github/pwlin/cordova/plugins/fileopener2/FileOpener2.java
+++ b/src/android/io/github/pwlin/cordova/plugins/fileopener2/FileOpener2.java
@@ -102,27 +102,29 @@ public class FileOpener2 extends CordovaPlugin {
File file = new File(fileName);
if (file.exists()) {
try {
- Uri path = Uri.fromFile(file);
- Intent intent = new Intent(Intent.ACTION_VIEW);
- if((Build.VERSION.SDK_INT >= 23 && !contentType.equals("application/vnd.android.package-archive")) || ((Build.VERSION.SDK_INT == 24 || Build.VERSION.SDK_INT == 25) && contentType.equals("application/vnd.android.package-archive"))) {
-
- Context context = cordova.getActivity().getApplicationContext();
- path = FileProvider.getUriForFile(context, cordova.getActivity().getPackageName() + ".opener.provider", file);
+ Intent intent;
+ if (contentType.equals("application/vnd.android.package-archive")) {
+ // https://stackoverflow.com/questions/9637629/can-we-install-an-apk-from-a-contentprovider/9672282#9672282
+ intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
+ Uri path;
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
+ path = Uri.fromFile(file);
+ } else {
+ Context context = cordova.getActivity().getApplicationContext();
+ path = FileProvider.getUriForFile(context, cordova.getActivity().getPackageName() + ".opener.provider", file);
+ }
intent.setDataAndType(path, contentType);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
- //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- List infoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
- for (ResolveInfo resolveInfo : infoList) {
- String packageName = resolveInfo.activityInfo.packageName;
- context.grantUriPermission(packageName, path, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
- }
- }
- else {
+ } else {
+ intent = new Intent(Intent.ACTION_VIEW);
+ Context context = cordova.getActivity().getApplicationContext();
+ Uri path = FileProvider.getUriForFile(context, cordova.getActivity().getPackageName() + ".opener.provider", file);
intent.setDataAndType(path, contentType);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NO_HISTORY);
+
}
+
/*
* @see
* http://stackoverflow.com/questions/14321376/open-an-activity-from-a-cordovaplugin
diff --git a/src/android/res/xml/opener_paths.xml b/src/android/res/xml/opener_paths.xml
index 9dc2098..0ffc88e 100644
--- a/src/android/res/xml/opener_paths.xml
+++ b/src/android/res/xml/opener_paths.xml
@@ -1,8 +1,14 @@
+
+
-
-
-
-
+
+
+
+
+
+
+
+