Делитесь изображениями Picasa с моим приложением для Android

Я создал приложение, которое может загружать изображения с моего телефона (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>

person boffman    schedule 07.03.2012    source источник


Ответы (1)


После некоторых усилий и использования отличного приложения «Intent Intercept» я обнаружил, что изображения picasa имеют тип mime «текст/обычный», и у них есть строка URL-адреса в Intent.EXTRA_TEXT.

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

       <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-адрес действительно указывает на изображение или какие-то другие непослушные вещи :-)

person boffman    schedule 08.03.2012