当前位置: 首页 > 知识库问答 >
问题:

使Ionic应用程序出现在"共享"列表中并接收数据

姬裕
2023-03-14

我试图让一个Ionic应用程序出现在“共享”列表中,当用户单击共享按钮时,例如一个图像。

据我所知,我必须补充一些东西,比如

<intent-filter> 
   <action android:name="android.intent.action.SEND" />
   <category android:name="android.intent.category.DEFAULT" />
   <data android:mimeType="image/*" />
</intent-filter>

AndroidManifest。xml。我想我可以使用cordova定制配置插件来实现这一点<然而,我必须以某种方式处理这种意图,这就是我变得棘手的地方。似乎唯一一个目前正在维护的cordova插件就是这个。我试着这样使用它:

  initializeApp() {
    this.platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      this.statusBar.styleDefault();
      this.splashScreen.hide();
      this.registerBroadcastReceiver();
    });
  }
  private registerBroadcastReceiver(){
      window.plugins.intentShim.registerBroadcastReceiver({
          filterActions: [
              'com.darryncampbell.cordova.plugin.broadcastIntent.ACTION'
              ]
          },
          function(intent) {
              //  Broadcast received
              console.log('Received Intent: ' + JSON.stringify(intent.extras));
          }
      );
  }

但是这样我得到一个错误,window.plugins是未定义的。我真的不知道如何把它和离子结合起来。

此外,这只适用于Android,我希望有工作的iOS。这个SO问题是相关的,并提到了一种iOS的方法,但它已经有4年的历史了(链接iOS部分5年),答案中为Android指定的项目网络意图甚至不再存在。

如果有人能帮我就好了。

同样相关的还有:

  • Cordova从其他应用程序接收共享数据-使用过时的插件,window。插件,特定于Android
  • 从另一个应用程序通过webintents向爱奥尼亚Android应用程序发送url——使用过时的插件,window。插件,特定于Android

使现代化

所有的答案都只关注Android系统,我真的希望有人能为我指出iOS的正确方向,因为我更需要它。。。

赏金
经过长期考虑,我决定把赏金给@Ghandi。虽然没有人能给出完整的答案,但他是唯一一个试图回答整个问题的人——包括iOS部分。我并不期待一个完整的代码解决方案,只是一个指向Android和iOS正确方向的指针,这是他最接近的答案。我知道这是一个非常广泛的问题,我想感谢所有花时间回答和/或评论这个问题的人。

Android
正如我在上面的问题中所描述的,您必须将这些行添加到AndroidManifest中。xml。Android会让你的应用出现在共享列表中。你的应用程序接收到的数据必须通过所谓的意图来处理。为此,您可以使用Ionic Native-Web Intent。截至2017年5月9日,这还不起作用,因为Ionic Native使用的插件已不存在。然而,我在Github上创建了一个问题,有人告诉我,下一个版本的Ionic Native(我认为是3.7.0),应该在接下来的两周内发布,应该通过使用我上面问题中提到的插件来解决这个问题。这就解决了一个问题,那就是你自己必须在Ionic框架下玩,并且只需要使用Ionic Native。

iOS
在iOS中,它似乎有点棘手,而且在网络上也很少能找到它。您最好按照@Ghandi在下面的答案中提供的链接进行操作。

共有3个答案

方献
2023-03-14

尝试

window.intentShim.registerBroadcastReceiver

或者在内部调用函数

document.addEventListener('deviceready', function(){
    registerBroadcastReceiver() }, 
false);
艾令秋
2023-03-14

用于运行插件https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent,试试看:

>

  • 安装插件与-保存以确保插件已添加到您的config.xml

    ionic plugin add https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent --save
    

    由于此插件没有在ionic-本地中导入,因此需要标识全局对象。这将在插件文件夹中声明-

       <js-module name="IntentShim" src="www/IntentShim.js">
          <clobbers target="intentShim" />
      </js-module>
    

    代码中声明全局对象为:

    declare var intentShim:any;
    

    在你的功能中,

    private registerBroadcastReceiver(){
      intentShim.registerBroadcastReceiver({
          filterActions: [
              'com.darryncampbell.cordova.plugin.broadcastIntent.ACTION'
              ]
          },
          function(intent) {
              //  Broadcast received
              console.log('Received Intent: ' + JSON.stringify(intent.extras));
          }
      );
    }
    

  • 宇文德明
    2023-03-14

    经过详细分析,我可以得出以下结论:

    在Android中,您可以使用cordova插件意图将应用程序添加到共享列表中,如下所述。您还可以通过如下所述在活动中添加意图过滤器来实现这一点

    在iOS中,这有点棘手,因为没有直接的插件或现成的解决方案来实现这一点。但是,我能找到的与在iOS共享菜单中添加应用程序相关的最佳链接是在共享菜单中列出。该链接包括苹果的相关文档,以及一些信息调整。请务必做到这一点。

    这是我能想到的最好的答案。希望有帮助。干杯。

     类似资料:
    • 问题内容: 我希望当用户共享另一个应用程序(例如浏览器)的URL时,我的Android应用程序显示为一个选项。我该如何注册我的应用程序?我如何反应链接共享? 非常感谢。 编辑: 我试过像这样使用IntentFilter,但没有成功: 有任何想法吗? 问题答案: 您至少需要: 在清单中…至少会使其显示在“共享”列表中。 您缺少的最重要的部分是: 要使其实际执行某项操作,您需要一个Activity。

    • 首先请不要把这个问题当作重复的问题。所有其他问题都是旧的,我已经尝试了其中大多数的解决方案,但没有一个奏效。 我正在开发一个Android应用程序,我已经将我的应用程序添加到共享Android菜单中。我想添加功能,这样如果用户在共享列表上单击我的应用,例如在Chrome浏览器或Google Drive应用中,我的应用将从该应用接收数据,例如从Chrome it wold URL。 我尝试过使用不同

    • 主要内容:应用程序类数据共享的过程当 JVM 启动时,它会将类加载到内存中作为初步步骤。如果有多个具有多个类的 jar,则第一个请求会出现明显的滞后。在无服务器架构中,这种延迟会延迟启动时间,这是此类架构中的关键操作。应用程序类数据共享概念有助于减少应用程序的启动时间。Java 具有现有的 CDS(类数据共享)功能。通过应用程序类数据共享,Java 10 允许将应用程序类放在共享存档中。这通过跨多个 Java 进程共享公共类元数据

    • cli包:(C:\users\abdo\appdata\roaming\npm\node_modules)@ionic/cli-utils:1.19.1 ionic(ionic cli):3.19.1全局包:cordova(cordova cli):7.1.0本地包:@ionic/app-scripts:3.1.8 cordova平台:android 6.3.0 ionic Framework:i

    • 我正在使用FB。允许用户使用此代码共享我的页面的ui: 当从 Android 移动应用程序中的嵌入式浏览器共享页面时,用户可以选择要用于打开共享对话框的应用程序。如果选择了脸书应用,则不会有回调响应。在普通的桌面浏览器中,一切都按预期工作。这种行为是预期的吗?

    • 问题内容: 我想知道我们是否可以使用新的iOS 8功能在应用程序之间共享数据:应用程序组(使用NSUserDefaults)-还是应用程序组仅在主应用程序及其扩展名之间共享数据? 我实际上在应该在它们之间共享数据的两个应用程序(它们属于同一公司)上启用了“应用程序组”功能。它们也具有相同的“应用程序组”内容(例如group.com.company.myApp)。 这是第一个代码(在Swift中)