分享一些东西到phonegap应用程序

时间:2013-06-04 01:01:35

标签: cordova phonegap-plugins phonegap-build

有没有办法注册一个应用程序菜单中出现的phonegap应用程序?

enter image description here

3 个答案:

答案 0 :(得分:42)

要显示在此列表中,您必须修改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文件。你可能不得不去科尔多瓦路线并在你的机器上构建一切。


编辑:有一些人在iOS上询问如何执行此操作。有两个步骤:

  1. 通过在info.plist中添加相关信息,将您的应用与正确的文件类型关联相关联。这个SO答案解释了如何做到这一点:How do I associate file types with an iPhone application?。这会使您的应用出现在列表中,但您的应用尚未收到数据。
  2. 您的应用程序现在将使用新参数启动。您现在必须能够读取这些参数。在SO上查看此问题/答案,它确实如此:How to pass arguments to app built on Phonegap

答案 1 :(得分:4)

我设法获取要共享的文件的URL;在设备内部使用EXTRA_STREAM EXTRA_TEXT,修改Webintent.java,并在AndroidMenifest.xml中添加一个intent过滤器。

这是我的主要活动的外观:

    <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。

答案 2 :(得分:1)

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