文章图片
如果我们希望我们的应用程序出现在android的打开方式列表中, 则需要在AndroidManifest.xml文件中允许此意图。
所需的插件
- cordova-custom-config:我们需要更改AndroidManifest.xml的默认配置, 但是由于在以后的构建中更改可能会丢失, 因此我们不会手动操作它, 因此我们需要使用一个插件, 该插件在每次构建时都会添加自定义配置具有不同版本的应用程序。
- cordova-plugin-intent:当上一个插件的配置准备就绪时, 我们需要在每次调用时操纵文件Intents(当用户从??另一个应用程序执行Open With并且未初始化我们的应用程序时, 等等)
- 耐心点!
我们需要知道我们要做什么以及为什么。
我们需要修改intent-filter并添加以下权限(此显式示例将使我们的应用程序可以打开所有类型的文件, 在此处阅读有关android mimetypes的更多信息以按所需的扩展名进行过滤)
<
intent-filter>
<
action android:name="android.intent.action.VIEW" />
<
category android:name="android.intent.category.DEFAULT" />
<
category android:name="android.intent.category.BROWSABLE" />
<
data android:scheme="file" />
<
data android:mimeType="*/*" />
<
data android:pathPattern=".*\\.txt" />
<
/intent-filter>
现在的问题是, 我们不能简单地将先前的代码块添加到config.xml中, 因为它无法被识别, 这就是cordova-custom-config可以帮助我们从config.xml直接修改AndroidManifest.xml的地方。
【如何在Android的” 打开方式” 菜单中列出你的cordova应用并处理Intent事件】最后, 我们将使用cordova-plugin-intent从javascript处理应用程序的intent事件。
在你的应用程序中启用Intent的使用
Intent是一个消息传递对象, 可用于从另一个应用程序组件请求操作。下载所需的cordova插件:
# Install custom configuration$ cordova plugin add cordova-custom-config# Then install the intent handler$ cordova plugin add https://github.com/napolitano/cordova-plugin-intent
然后, 你需要允许对项目使用自定义配置, 将xmlns:android =” http://schemas.android.com/apk/res/android” 属性添加到config.xml文件中的小部件节点, 小部件应如下所示:
<
?xml version='1.0' encoding='utf-8'?>
<
!-- Note the xmlns:android="blabla" as property of the widget node -->
<
widget id="com.ourcodeworld.ourcodeeditorfree" version="1.3.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:android="http://schemas.android.com/apk/res/android">
<
!-- We will make some changes in this node later -->
<
platform name="android">
<
allow-intent href="http://www.srcmini.com/market:*" />
<
/platform>
<
platform name="ios">
<
allow-intent href="http://www.srcmini.com/itms:*" />
<
allow-intent href="http://www.srcmini.com/itms-apps:*" />
<
/platform>
<
/widget>
现在, 修改config.xml文件, 并使用config块添加intent-filter(custom-config插件会将config-block的内容直接添加到AndroidManifest.xml文件中, 而无需删除任何现有节点):
注意:你需要在AndroidManifest.xml文件中创建一个额外的intent-filter节点, 如果将这些属性添加到现有的intent-filter中, 则你的应用程序将进行编译, 但以后将看不到启动该应用程序的图标。
<
!-- Locate the android platform -->
<
platform name="android">
<
!--
Add a new intent-filter node to the app activity :
-->
<
config-file target="AndroidManifest.xml" parent="./application/activity">
<
intent-filter>
<
action android:name="android.intent.action.VIEW" />
<
category android:name="android.intent.category.DEFAULT" />
<
category android:name="android.intent.category.BROWSABLE" />
<
data android:scheme="file" />
<
data android:mimeType="*/*" />
<
data android:pathPattern=".*\\.txt" />
<
/intent-filter>
<
/config-file>
<
/platform>
如果你决定立即构建你的应用, 则AndroidManifest.xml现在应在intent-filter节点内包括属性:
文章图片
而且, 如果你使用(任何应用程序)触发打开操作且mimeType是正确的, 则你的应用程序应立即出现在该列表中, 但是我们仍然需要操纵如何使用Javascript处理打开的文件。
处理意图
这就是cordova-plugin-intent对我们有帮助的时候。我们需要对接收到的文件(文件信息)做一些事情, 我们将使用以下代码(在onDeviceReady事件之后)对其进行处理:
document.addEventListener('deviceready', function(){
var HandleIntent = function (Intent) {
console.log(intent);
// With intent you'll do almost everything
if(Intent.hasOwnProperty('data')){
// Do something with the File
}else{
// this will happen in getCordovaIntent when the app starts and there's no
// active intent
console.log("The app was opened manually and there's not file to open");
}
};
// Handle the intent when the app is open
// If the app is running in the background, this function
// will handle the opened file
window.plugins.intent.setNewIntentHandler(HandleIntent);
// Handle the intent when the app is not open
// This will be executed only when the app starts or wasn't active// in the background
window.plugins.intent.getCordovaIntent(HandleIntent, function () {
alert("Error: Cannot handle open with file intent");
});
}, false);
一个意图对象, 看起来像:
{
"action": "android.intent.action.SEND_MULTIPLE",
"clipItems": [
{
"uri": "file:///storage/emulated/0/Download/example-document.pdf",
"type": "application/pdf",
"extension": "pdf"
},
{
"uri": "file:///storage/emulated/0/Download/example-archive.zip",
"type": "application/zip",
"extension": "zip"
}
{
"uri": "content://media/external/images/media/29",
"type": "image/jpeg",
"extension": "jpeg"
}
],
"flags": 390070273,
"type": "*/*",
"component": "ComponentInfo{com.example.droid/com.example.droid.MainActivity}",
"extras": "Bundle[mParcelledData.dataSize=596]"}
在此处阅读有关cordova意向插件的更多信息。
构建你的应用程序, 然后你将看到你的应用程序在” 打开方式” 菜单上列出, 并且你可以执行一些操作, 例如使用具有给定信息的应用程序打开文件, 祝你玩得开心!
文章图片
推荐阅读
- 如何修复Cordova(Android)构建问题(install_failed_update_incompatible)
- 如何在Android的Cordova插件中获取上下文
- 如何知道你的应用程序是否在Cordova或Web浏览器中运行
- 如何在Cordova应用程序中检索网络(互联网连接)信息
- 如何将JSON对象从Java返回到javascript(cordova)
- 如何使用Cordova从设备上的base64字符串中保存PDF
- 如何在Cordova Android项目中使用Crosswalk WebView
- 如何在Cordova应用程序中使用Dropbox
- 如何在Android和iOS的Cordova(Phonegap,ionic)中使用指纹认证