web-dev-qa-db-ja.com

phonegapアプリに何かを共有する

共有するアプリケーションのメニューに表示されるphonegapアプリを登録する方法はありますか?

enter image description here

24
karacas

このリストに表示するには、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でこれを行う方法を尋ねる人が数人います。これを行うには2つのステップがあります:

  1. Info.plistに関連情報を追加して、アプリを適切なファイルタイプの関連付けに関連付けます。このSO回答はそれを行う方法を説明しています: ファイルタイプをiPhoneアプリケーションに関連付けるにはどうすればよいですか? 。これにより、アプリはリストに表示されますが、アプリは勝ちましたまだデータを受信して​​いません。
  2. これで、アプリケーションが新しいパラメータで起動されます。これらのパラメータを読み取ることができる必要があります。 SOでこの質問/回答を確認してください、それはまさにそれを行います: Phonegap上に構築されたアプリに引数を渡す方法
42

共有するファイルのURLを取得できました。 deviceready内でEXTRA_TEXTの代わりにEXTRA_STREAMを使用し、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/2

また、jsファイル内で、次のような関数を呼び出す必要があります:( EXTRA_TEXTの代わりにEXTRA_STREAMを使用)

    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を取得します。

4
Moinkhan

@ ericpeters0n-iPhoneアプリと共有を使用する場合、このアプリのリストはどこから来たのですか?たとえば、フォトギャラリーにいて共有している場合、リストにはメッセージ、メール、Twitter、Facebook、Flickrが含まれます。これらのアプリはどのようにしてこのリストに表示されるように登録されましたか?

1
Marius George