25

有什么方法可以注册 phonegap 应用程序以显示在要共享的应用程序菜单中?

在此处输入图像描述

4

3 回答 3

43

要出现在此列表中,您必须修改 AndroidManifest.xml 文件并在您的活动下添加以下行:

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

这将使您的应用程序出现在列表中。现在我想你可能还想知道如何在你的代码中处理这个问题。当另一个应用程序要与您共享一些文本时,它将使用 Android“Intent”启动您的应用程序。为了能够使用 Intents,您需要一个 PhoneGap 插件。我认为 WebIntent 可能适合你。这将是代码:

// deviceready is PhoneGap's init event
document.addEventListener('deviceready', function () {
  window.plugins.webintent.getExtra(WebIntent.EXTRA\_TEXT, function (url) {
    // url is the value of EXTRA_TEXT 
  }, function() {
    // There was no extra supplied.
  });
});

有关 WebIntent 的更多信息:http: //smus.com/android-phonegap-plugins/

注意:我认为你不能使用 PhoneGap Build 来做到这一点……你只能使用受支持的插件,并且不能对 AndroidManifest.xml 文件进行太多更改。您可能不得不走 Cordova 路线并在您的机器上构建所有内容。


编辑:有几个人问如何在 iOS 上做到这一点。有两个步骤可以做到这一点:

  1. 通过在 info.plist 中添加相关信息,将您的应用与正确的文件类型关联相关联。这个 SO 答案解释了如何做到这一点:如何将文件类型与 iPhone 应用程序相关联?. 这将使您的应用出现在列表中,但您的应用还不会收到数据。
  2. 您的应用程序现在将使用新参数启动。您现在必须能够读取这些参数。检查这个问题/答案,它确实做到了:如何将参数传递给基于Phonegap的应用程序
于 2013-06-06T10:00:25.867 回答
4

我设法获取要共享的文件的 URL;通过在 deviceready 中使用 EXTRA_STREAM insted of EXTRA_TEXT,修改 Webintent.java,并在 AndroidMenifest.xml 中添加一个意图过滤器。

这是我的主要活动的样子:

    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
        <intent-filter android:label="@string/launcher_name">
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter android:label="@string/app_name">
            <data android:mimeType="*/*" />
            <action android:name="android.intent.action.SEND" />                
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

我发现插件有一个EXTRA_STREAM部分的错误,所以我根据这个修改了我的javafile:

https://github.com/Initsogar/cordova-webintent/issues/23

同样在我的 js 文件中,我必须像这样调用函数:(使用 EXTRA_STREAM 而不是 EXTRA_TEXT )

    window.plugins.webintent.getExtra(window.plugins.webintent.EXTRA_STREAM, function (url) {
        // url is the value of EXTRA_STREAM 
        alert(url);
      }, function() {
        // There was no extra supplied.
        alert("no url");
      });

我得到了文件的 URI。

于 2015-06-09T07:26:34.387 回答
1

@ericpeters0n - 当使用 iPhone 应用程序和共享时,这个应用程序列表从何而来?例如,当我在照片库中并分享时,列表包括消息、邮件、Twitter、Facebook、Flickr。这些应用程序是如何注册自己出现在此列表中的?

于 2014-09-14T09:58:11.427 回答