有没有办法注册PhoneGap应用程序,使其出现在应用程序共享菜单中?
要想出现在此列表中,您需要修改AndroidManifest.xml文件并在您的活动下添加以下行:
要出现在此列表中,必须修改 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的更多信息。
注意:我认为您无法使用PhoneGap Build实现此目标...您只能使用受支持的插件,并且不能太多地更改AndroidManifest.xml文件。您可能需要使用Cordova路线,并在计算机上构建所有内容。
编辑:有一些人询问如何在iOS上执行此操作。这里有两个步骤:
我成功获取了要共享的文件的URL; 通过在deviceready中使用EXTRA_STREAM而不是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部分时存在一个错误,所以我根据以下方式修改了我的Java文件:
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。