如何在Android的”打开方式”菜单中列出你的cordova应用并处理Intent事件

如何在Android的”打开方式”菜单中列出你的cordova应用并处理Intent事件

文章图片
如果我们希望我们的应用程序出现在android的打开方式列表中, 则需要在AndroidManifest.xml文件中允许此意图。
所需的插件
  1. cordova-custom-config:我们需要更改AndroidManifest.xml的默认配置, 但是由于在以后的构建中更改可能会丢失, 因此我们不会手动操作它, 因此我们需要使用一个插件, 该插件在每次构建时都会添加自定义配置具有不同版本的应用程序。
  2. cordova-plugin-intent:当上一个插件的配置准备就绪时, 我们需要在每次调用时操纵文件Intents(当用户从??另一个应用程序执行Open With并且未初始化我们的应用程序时, 等等)
  3. 耐心点!
在继续之前
我们需要知道我们要做什么以及为什么。
我们需要修改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节点内包括属性:
如何在Android的&#8221;打开方式&#8221;菜单中列出你的cordova应用并处理Intent事件

文章图片
而且, 如果你使用(任何应用程序)触发打开操作且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意向插件的更多信息。
构建你的应用程序, 然后你将看到你的应用程序在” 打开方式” 菜单上列出, 并且你可以执行一些操作, 例如使用具有给定信息的应用程序打开文件, 祝你玩得开心!
如何在Android的&#8221;打开方式&#8221;菜单中列出你的cordova应用并处理Intent事件

文章图片

    推荐阅读