mirror of
https://gitee.com/shuto/cordova-plugin-file-opener2.git
synced 2025-01-31 12:02:49 +08:00
Merge pull request #72 from VincentRoth/master
Positioning dialog for iOS
This commit is contained in:
commit
b969aa748a
342
README.md
342
README.md
@ -1,170 +1,172 @@
|
|||||||
A File Opener Plugin for Cordova (The Original Version)
|
A File Opener Plugin for Cordova (The Original Version)
|
||||||
==========================
|
==========================
|
||||||
This plugin will open a file on your device file system with its default application.
|
This plugin will open a file on your device file system with its default application.
|
||||||
|
|
||||||
[![npm version](https://badge.fury.io/js/cordova-plugin-file-opener2.svg)](https://badge.fury.io/js/cordova-plugin-file-opener2)
|
[![npm version](https://badge.fury.io/js/cordova-plugin-file-opener2.svg)](https://badge.fury.io/js/cordova-plugin-file-opener2)
|
||||||
|
|
||||||
Requirements
|
Requirements
|
||||||
-------------
|
-------------
|
||||||
- Android 4 or higher / iOS 6 or higher / WP8
|
- Android 4 or higher / iOS 6 or higher / WP8
|
||||||
- Cordova 3.0 or higher
|
- Cordova 3.0 or higher
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
-------------
|
-------------
|
||||||
```shell
|
```shell
|
||||||
$ cordova plugin add cordova-plugin-file-opener2
|
$ cordova plugin add cordova-plugin-file-opener2
|
||||||
$ cordova plugin add cordova-plugin-file-opener2 --variable ANDROID_SUPPORT_VERSION={required version}
|
$ cordova plugin add cordova-plugin-file-opener2 --variable ANDROID_SUPPORT_VERSION={required version}
|
||||||
```
|
```
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
------
|
------
|
||||||
```javascript
|
```javascript
|
||||||
cordova.plugins.fileOpener2.open(
|
cordova.plugins.fileOpener2.open(
|
||||||
filePath,
|
filePath,
|
||||||
fileMIMEType,
|
fileMIMEType,
|
||||||
{
|
{
|
||||||
error : function(){ },
|
error : function(){ },
|
||||||
success : function(){ }
|
success : function(){ },
|
||||||
}
|
position : [x, y]
|
||||||
);
|
}
|
||||||
```
|
);
|
||||||
|
```
|
||||||
Examples
|
`position` array of coordinates from top-left device screen, use for iOS dialog positioning.
|
||||||
--------
|
|
||||||
Open an APK install dialog:
|
Examples
|
||||||
|
--------
|
||||||
```javascript
|
Open an APK install dialog:
|
||||||
cordova.plugins.fileOpener2.open(
|
|
||||||
'/sdcard/Download/gmail.apk',
|
```javascript
|
||||||
'application/vnd.android.package-archive'
|
cordova.plugins.fileOpener2.open(
|
||||||
);
|
'/sdcard/Download/gmail.apk',
|
||||||
```
|
'application/vnd.android.package-archive'
|
||||||
|
);
|
||||||
Install From Market: to install an APK from a market place, such as Google Play or the App Store, you can use an `<a>` tag in combination with the `market://` protocol:
|
```
|
||||||
|
|
||||||
```html
|
Install From Market: to install an APK from a market place, such as Google Play or the App Store, you can use an `<a>` tag in combination with the `market://` protocol:
|
||||||
<a href="market://details?id=xxxx" target="_system">Install from Google Play</a>
|
|
||||||
<a href="itms-apps://itunes.apple.com/app/my-app/idxxxxxxxx?mt=8" target="_system">Install from App Store</a>
|
```html
|
||||||
```
|
<a href="market://details?id=xxxx" target="_system">Install from Google Play</a>
|
||||||
|
<a href="itms-apps://itunes.apple.com/app/my-app/idxxxxxxxx?mt=8" target="_system">Install from App Store</a>
|
||||||
or in code:
|
```
|
||||||
```javascript
|
|
||||||
window.open("[market:// or itms-apps:// link]","_system");
|
or in code:
|
||||||
```
|
```javascript
|
||||||
|
window.open("[market:// or itms-apps:// link]","_system");
|
||||||
Open a PDF document with the default PDF reader and optional callback object:
|
```
|
||||||
```javascript
|
|
||||||
cordova.plugins.fileOpener2.open(
|
Open a PDF document with the default PDF reader and optional callback object:
|
||||||
'/sdcard/Download/starwars.pdf', // You can also use a Cordova-style file uri: cdvfile://localhost/persistent/Download/starwars.pdf
|
```javascript
|
||||||
'application/pdf',
|
cordova.plugins.fileOpener2.open(
|
||||||
{
|
'/sdcard/Download/starwars.pdf', // You can also use a Cordova-style file uri: cdvfile://localhost/persistent/Download/starwars.pdf
|
||||||
error : function(e) {
|
'application/pdf',
|
||||||
console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
|
{
|
||||||
},
|
error : function(e) {
|
||||||
success : function () {
|
console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
|
||||||
console.log('file opened successfully');
|
},
|
||||||
}
|
success : function () {
|
||||||
}
|
console.log('file opened successfully');
|
||||||
);
|
}
|
||||||
```
|
}
|
||||||
Open a system modal to open PDF document with one of the already installed app and optional callback object:
|
);
|
||||||
```javascript
|
```
|
||||||
cordova.plugins.fileOpener2.showOpenWithDialog(
|
Open a system modal to open PDF document with one of the already installed app and optional callback object:
|
||||||
'/sdcard/Download/starwars.pdf', // You can also use a Cordova-style file uri: cdvfile://localhost/persistent/Download/starwars.pdf
|
```javascript
|
||||||
'application/pdf',
|
cordova.plugins.fileOpener2.showOpenWithDialog(
|
||||||
{
|
'/sdcard/Download/starwars.pdf', // You can also use a Cordova-style file uri: cdvfile://localhost/persistent/Download/starwars.pdf
|
||||||
error : function(e) {
|
'application/pdf',
|
||||||
console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
|
{
|
||||||
},
|
error : function(e) {
|
||||||
success : function () {
|
console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
|
||||||
console.log('file opened successfully');
|
},
|
||||||
}
|
success : function () {
|
||||||
}
|
console.log('file opened successfully');
|
||||||
);
|
}
|
||||||
```
|
}
|
||||||
|
);
|
||||||
Notes
|
```
|
||||||
------
|
|
||||||
|
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 `<preference name="iosPersistentFileLocation" value="Library" />` from your `config.xml`
|
- 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.
|
||||||
|
|
||||||
- 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)
|
- [It is reported](https://github.com/pwlin/cordova-plugin-file-opener2/issues/2#issuecomment-41295793) that in iOS, you might need to remove `<preference name="iosPersistentFileLocation" value="Library" />` 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:
|
Android APK installation limitation
|
||||||
- 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:
|
---
|
||||||
```xml
|
The following limitations apply when opening an APK file for installation:
|
||||||
<platform name="android">
|
- 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:
|
||||||
<config-file parent="/manifest" target="AndroidManifest.xml" xmlns:android="http://schemas.android.com/apk/res/android">
|
```xml
|
||||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
<platform name="android">
|
||||||
</config-file>
|
<config-file parent="/manifest" target="AndroidManifest.xml" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
</platform>
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||||
```
|
</config-file>
|
||||||
|
</platform>
|
||||||
- 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
|
- 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.
|
||||||
---
|
|
||||||
The following functions are available in Android platform:
|
Additional Android Functions
|
||||||
|
---
|
||||||
`.uninstall(packageId, callbackContext)`
|
The following functions are available in Android platform:
|
||||||
---
|
|
||||||
Uninstall a package with its id.
|
`.uninstall(packageId, callbackContext)`
|
||||||
```javascript
|
---
|
||||||
cordova.plugins.fileOpener2.uninstall('com.zynga.FarmVille2CountryEscape', {
|
Uninstall a package with its id.
|
||||||
error : function(e) {
|
```javascript
|
||||||
console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
|
cordova.plugins.fileOpener2.uninstall('com.zynga.FarmVille2CountryEscape', {
|
||||||
},
|
error : function(e) {
|
||||||
success : function() {
|
console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
|
||||||
console.log('Uninstall intent activity started.');
|
},
|
||||||
}
|
success : function() {
|
||||||
});
|
console.log('Uninstall intent activity started.');
|
||||||
```
|
}
|
||||||
`.appIsInstalled(packageId, callbackContext)`
|
});
|
||||||
---
|
```
|
||||||
Check if an app is already installed.
|
`.appIsInstalled(packageId, callbackContext)`
|
||||||
```javascript
|
---
|
||||||
cordova.plugins.fileOpener2.appIsInstalled('com.adobe.reader', {
|
Check if an app is already installed.
|
||||||
success : function(res) {
|
```javascript
|
||||||
if (res.status === 0) {
|
cordova.plugins.fileOpener2.appIsInstalled('com.adobe.reader', {
|
||||||
console.log('Adobe Reader is not installed.');
|
success : function(res) {
|
||||||
} else {
|
if (res.status === 0) {
|
||||||
console.log('Adobe Reader is installed.')
|
console.log('Adobe Reader is not installed.');
|
||||||
}
|
} else {
|
||||||
}
|
console.log('Adobe Reader is installed.')
|
||||||
});
|
}
|
||||||
```
|
}
|
||||||
---
|
});
|
||||||
|
```
|
||||||
Contributors
|
---
|
||||||
------------
|
|
||||||
[@Gillardo](https://github.com/Gillardo/), [@TankOs](https://github.com/TankOs), [@Rovi23](https://github.com/Rovi23), [@josemanuelbd](https://github.com/josemanuelbd), [@ielcoro](https://github.com/ielcoro), [@keturn](https://github.com/keturn), [@conform](https://github.com/conform), [@guyc](https://github.com/guyc), [@J3r0M3D3V](https://github.com/J3r0M3D3V), [@WuglyakBolgoink](https://github.com/WuglyakBolgoink), [@lincolnthree](https://github.com/lincolnthree), [@rocco](https://github.com/rocco/), [@FrankFenton](https://github.com/FrankFenton), [@MHolmes91](https://github.com/MHolmes91), [@souly1](https://github.com/souly1), [@diogodias86](https://github.com/diogodias86), [@Arxi](https://github.com/Arxi), [@vzharkov](https://github.com/vzharkov), [@lp1bp](https://github.com/lp1bp), [@stalniy](https://github.com/stalniy), [@liugogal](https://github.com/liugogal), [@lcaprini](https://github.com/lcaprini), [@jcdickman](https://github.com/jcdickman) [@shnist](https://github.com/shnist) [@Eeems](https://github.com/Eeems)
|
Contributors
|
||||||
|
------------
|
||||||
---
|
[@Gillardo](https://github.com/Gillardo/), [@TankOs](https://github.com/TankOs), [@Rovi23](https://github.com/Rovi23), [@josemanuelbd](https://github.com/josemanuelbd), [@ielcoro](https://github.com/ielcoro), [@keturn](https://github.com/keturn), [@conform](https://github.com/conform), [@guyc](https://github.com/guyc), [@J3r0M3D3V](https://github.com/J3r0M3D3V), [@WuglyakBolgoink](https://github.com/WuglyakBolgoink), [@lincolnthree](https://github.com/lincolnthree), [@rocco](https://github.com/rocco/), [@FrankFenton](https://github.com/FrankFenton), [@MHolmes91](https://github.com/MHolmes91), [@souly1](https://github.com/souly1), [@diogodias86](https://github.com/diogodias86), [@Arxi](https://github.com/Arxi), [@vzharkov](https://github.com/vzharkov), [@lp1bp](https://github.com/lp1bp), [@stalniy](https://github.com/stalniy), [@liugogal](https://github.com/liugogal), [@lcaprini](https://github.com/lcaprini), [@jcdickman](https://github.com/jcdickman) [@shnist](https://github.com/shnist) [@Eeems](https://github.com/Eeems)
|
||||||
|
|
||||||
LICENSE
|
---
|
||||||
--------
|
|
||||||
The MIT License (MIT)
|
LICENSE
|
||||||
|
--------
|
||||||
Copyright (c) 2013 pwlin - pwlin05@gmail.com
|
The MIT License (MIT)
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Copyright (c) 2013 pwlin - pwlin05@gmail.com
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
the Software without restriction, including without limitation the rights to
|
||||||
subject to the following conditions:
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
The above copyright notice and this permission notice shall be included in all
|
subject to the following conditions:
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
copies or substantial portions of the Software.
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
@ -38,6 +38,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
if ([command.arguments count] >= 3) {
|
if ([command.arguments count] >= 3) {
|
||||||
showPreview = [[command.arguments objectAtIndex:2] boolValue];
|
showPreview = [[command.arguments objectAtIndex:2] boolValue];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGRect rect;
|
||||||
|
if ([command.arguments count] >= 4) {
|
||||||
|
NSArray *positionValues = command.arguments[3];
|
||||||
|
rect = CGRectMake(0,0,[[positionValues objectAtIndex:0] floatValue],[[positionValues objectAtIndex:1] floatValue]);
|
||||||
|
} else {
|
||||||
|
rect = CGRectMake(0, 0, cont.view.bounds.size.width, cont.view.bounds.size.height);
|
||||||
|
}
|
||||||
|
|
||||||
CDVViewController* cont = (CDVViewController*)[super viewController];
|
CDVViewController* cont = (CDVViewController*)[super viewController];
|
||||||
self.cdvViewController = cont;
|
self.cdvViewController = cont;
|
||||||
@ -80,7 +88,6 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||||||
wasOpened = [docController presentPreviewAnimated: NO];
|
wasOpened = [docController presentPreviewAnimated: NO];
|
||||||
} else {
|
} else {
|
||||||
CDVViewController* cont = self.cdvViewController;
|
CDVViewController* cont = self.cdvViewController;
|
||||||
CGRect rect = CGRectMake(0, 0, cont.view.bounds.size.width, cont.view.bounds.size.height);
|
|
||||||
wasOpened = [docController presentOpenInMenuFromRect:rect inView:cont.view animated:YES];
|
wasOpened = [docController presentOpenInMenuFromRect:rect inView:cont.view animated:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,10 +26,10 @@ var exec = require('cordova/exec');
|
|||||||
|
|
||||||
function FileOpener2() {}
|
function FileOpener2() {}
|
||||||
|
|
||||||
FileOpener2.prototype.open = function (fileName, contentType, callbackContext) {
|
FileOpener2.prototype.open = function (fileName, contentType, options) {
|
||||||
contentType = contentType || '';
|
contentType = contentType || '';
|
||||||
callbackContext = callbackContext || {};
|
options = options || {};
|
||||||
exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType]);
|
exec(callbackContext.success || null, callbackContext.error || null, 'FileOpener2', 'open', [fileName, contentType, false, options.position]);
|
||||||
};
|
};
|
||||||
|
|
||||||
FileOpener2.prototype.showOpenWithDialog = function (fileName, contentType, callbackContext) {
|
FileOpener2.prototype.showOpenWithDialog = function (fileName, contentType, callbackContext) {
|
||||||
|
Loading…
Reference in New Issue
Block a user