Поделитесь чем-нибудь с приложением phonegap

Есть ли способ зарегистрировать приложение phonegap для отображения в меню приложений для обмена?

enter image description here

Ответ 1

Чтобы отобразиться в этом списке, вы должны изменить файл 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 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. Для этого есть два шага:

  • Свяжите ваше приложение с подходящими ассоциациями типов файлов, добавив соответствующую информацию в свой info.plist. Этот ответ SO объясняет, как это сделать: Как связать типы файлов с приложением iPhone?. Это заставит ваше приложение появиться в списке, но ваше приложение еще не получит данные.
  • Теперь ваше приложение будет запущено с новыми параметрами. Теперь вы должны иметь возможность читать эти параметры. Проверьте этот вопрос/ответ на SO, он делает именно это: Как передать аргументы в приложение, основанное на Phonegap.

Ответ 2

Мне удалось получить URL-адрес файла для совместного использования; используя EXTRA_STREAM insted EXTRA_TEXT внутри deviceready, модифицируя 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 файла.

Ответ 3

@ericpeters0n - При использовании приложений для iPhone и совместного доступа, откуда появился этот список приложений? Например, когда я участвую в фотогалерее, и я разделяю ее, в список входят Message, Mail, Twitter, Facebook, Flickr. Как эти приложения зарегистрировались в этом списке?