Поделитесь изображением из галереи Android в приложении Cordova с помощью Cordova.

Я могу добавить свое приложение Cordova в общий интерфейс, но я не знаю, как перенести эту общую картинку в мое приложение Cordova.

я использовал плагин com.borismus.webintent

и я вызываю приведенный ниже код в deviceready, но не повезло.

     function startActivity() {
        alert('start');
        window.plugins.webintent.startActivity({
            action: window.plugins.webintent.ACTION_VIEW,
            url: theFile.toURL(),
            type: 'application/vnd.android.package-archive'
        },
        function () { alert('success');},
        function () {
            alert('Failed to open URL via Android Intent.');
            console.log("Failed to open URL via Android Intent. URL: " +                      theFile.fullPath)
           }
          );
       }

    function broadcast() {
         window.plugins.webintent.sendBroadcast({
         action: 'com.dummybroadcast.action.triggerthing',
         extras: {
              'option': true
          }
         }, function (args) {
             alert(args);
         }, function (args) {
             alert(args);
       });
     }


    function getURI() {
        window.plugins.webintent.getUri(function (url) {
          if (url !== "") {
            // url is the url the intent was launched with
            alert(url);
          }
          else {
            alert('ddfsdf');
          }
        });
      }

Мое требование находится в галерее, если я нажму на значок sahre, там должно появиться мое приложение, и как только я выберу свое приложение, я смогу получить это изображение в своем приложении Cordova.

Я использую Cordova 3.4.0, androidвведите здесь описание изображения

и мой AndroidManifest.xml

    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="Share" android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.SEND_MULTIPLE" />
            <data android:mimeType="application/vnd.google.panorama360+jpg" />
            <data android:mimeType="image/*" />
            <data android:mimeType="video/*" />
            <data android:mimeType="text/plain" />
        </intent-filter>
      <intent-filter>
        <action android:name="com.creative.share.UNIQUESTRING" />
        <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
    </activity>
  <activity android:name="IntentTest" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
      <action android:name="android.intent.action.VIEW"></action>
      <category android:name="android.intent.category.DEFAULT"></category>
      <category android:name="android.intent.category.BROWSABLE"></category>
      <data android:host="www.youtube.com" android:scheme="http"></data>
    </intent-filter>
  </activity>


  <activity android:name=".BrowserActivity" android:label="@string/app_name" >
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:scheme="http" />
    </intent-filter>
  </activity>


    <provider android:authorities="com.creative.share.plugin.emailcomposer.attachmentprovider" android:name="de.appplant.cordova.plugin.emailcomposer.AttachmentProvider" />
</application>

person ani    schedule 07.05.2014    source источник


Ответы (1)


Я думаю, что частично могу ответить на этот вопрос. Я считаю, что вы пытаетесь поделиться изображением со своим приложением, где вы можете его обработать.

На момент написания упомянутый вами плагин содержал ошибку, однако вы можете попробовать следующий обходной путь: https://github.com/Initsogar/cordova-webintent/issues/23

Мой AndroidManifest.xml выглядит следующим образом:

<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:hardwareAccelerated="true">
    <activity android:name="Blah" android:label="@string/app_name"
            android:theme="@android:style/Theme.Black.NoTitleBar"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND"/>
            <action android:name="android.intent.action.SEND_MULTIPLE"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="*/*"/>
        </intent-filter>
    </activity>
</application>

Мой index.js выглядит следующим образом:

window.plugins.webintent.getExtra(webintent.EXTRA_STREAM,
    function (url)
    {
        console.log('getExtra: EXTRA_STREAM');
        console.log(url);

    }, function()
    {
        console.log('getExtra: EXTRA_STREAM failed');
    });

Я надеюсь, что это полезно.

Для полноты, если исправление не было установлено на момент чтения, вы можете вручную применить изменение самостоятельно в каталоге platform/android/src/com/borismus/webintent.

Предлагаемое исправление состоит в том, чтобы изменить WebIntent.java (около строки 94) на следующее:

if (i.hasExtra(extraName)) {
    String r = i.getStringExtra(extraName);
    if (null === r) {
        r = ((Uri) i.getParcelableExtra(extraName)).toString();
    }

    callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, r));
    return true;
}
person Mike    schedule 06.06.2014
comment
Будет ли это работать для обмена несколькими изображениями? потому что, когда я выбираю несколько изображений и нажимаю значок «Поделиться», мое приложение становится видимым, но оно не передает содержимое приложению и бросает попытку вызвать виртуальный метод «java.lang.String android.net.Uri.toString()» на ошибка ссылки на нулевой объект. Он отлично работает для обмена одним изображением. Помогите мне, пожалуйста. - person Mr_Green; 29.02.2016
comment
Привет, @Mr_Green, честно говоря, не знаю. Вероятно, вам лучше задать этот вопрос в исходном репозитории GitHub: github.com/Initsogar. /cordova-webintent/issues/23 - person Mike; 29.02.2016