Поделиться изображениями Picasa с моим приложением для Android - PullRequest
3 голосов
/ 07 марта 2012

Я создал приложение, которое может загружать изображения с моего телефона (Samsung Galaxy S2) на мой сервер, используя функцию «Отправить через» ...при просмотре изображения в галерее Android.

Однако мое приложение не отображается в качестве альтернативы в меню «Поделиться через» для изображений, которые я имею в сети, в Picasa.Мне интересно, как можно обрабатывать все виды изображений, которые отображаются в галерее - как локально хранящиеся на телефоне / SD-карте, так и удаленно, например, в Picasa?

Теперь у меня включены фильтры намеренийMIME-тип "image / *", я полагаю, это не соответствует изображениям Picasa по какой-то причине (?).

Из моего AndroidManifest.xml:

    <activity
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:name=".PublishImageActivity"
        android:theme="@style/Theme.Custom" >
        <intent-filter >
            <action android:name="android.intent.action.SEND" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="image/*" />
        </intent-filter>
    </activity>
    <activity
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:name=".PublishImageActivity"
        android:theme="@style/Theme.Custom" >
        <intent-filter >
            <action android:name="android.intent.action.CHOOSER" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="image/*" />
        </intent-filter>
    </activity>

1 Ответ

2 голосов
/ 08 марта 2012

После некоторых трудностей и использования превосходного приложения "Intent Intercept" я обнаружил, что изображения Picasa имеют тип MIME "text / plain" и имеют строку URL-адреса в Intent.EXTRA_TEXT.

Итак, чтобы обойти это, я добавил фильтры намерений, как указано выше, но для «text / plain» в манифесте;

       <intent-filter >
            <action android:name="android.intent.action.SEND" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="text/plain" />
        </intent-filter>

.. А в Деятельности проверьте, связано ли значение для Intent.EXTRA_TEXT в Intent - если так, получите его и проверьте, является ли это http-ссылкой .. И если так - загрузите изображение с URL;

    if (Intent.ACTION_SEND.equals(intent.getAction())) {
        Bundle extras = intent.getExtras();
        if (extras.containsKey(Intent.EXTRA_TEXT)) {
            Uri uri = Uri.parse((String) extras.getCharSequence(Intent.EXTRA_TEXT));
            if (uri != null) {
                String scheme = uri.getScheme();
                if (scheme.equals("http")) {
                    downloadImage(uri);
                    // ...

Однако мне все еще интересно, есть ли лучший способ справиться с этим? Кажется, у меня сейчас нет никаких гарантий, что URL-адрес действительно указывает на изображение или какой-то другой непослушный материал: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...