有什么方法可以注册 phonegap 应用程序以显示在要共享的应用程序菜单中?
3 回答
要出现在此列表中,您必须修改 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 上做到这一点。有两个步骤可以做到这一点:
- 通过在 info.plist 中添加相关信息,将您的应用与正确的文件类型关联相关联。这个 SO 答案解释了如何做到这一点:如何将文件类型与 iPhone 应用程序相关联?. 这将使您的应用出现在列表中,但您的应用还不会收到数据。
- 您的应用程序现在将使用新参数启动。您现在必须能够读取这些参数。检查这个问题/答案,它确实做到了:如何将参数传递给基于Phonegap的应用程序
我设法获取要共享的文件的 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。
@ericpeters0n - 当使用 iPhone 应用程序和共享时,这个应用程序列表从何而来?例如,当我在照片库中并分享时,列表包括消息、邮件、Twitter、Facebook、Flickr。这些应用程序是如何注册自己出现在此列表中的?