Получение простых данных из других android приложений

Так же, как ваше приложение может отправлять данные в другие приложения, оно может легко получать данные из других приложений. Подумайте о том, как пользователи взаимодействуют с вашим приложением, и какие типы данных вы хотите получать от других приложений. Например, приложение для социальных сетей, вероятно, будет заинтересовано в получении текстового контента из другого приложения, такого как интересный веб-адрес. Приложение Google+ для Android принимает текст, а также одно или несколько изображений. С помощью этого приложения, пользователь может легко создать новую запись в Google+ с фотографиями из Android приложения Галерея.

[wpanchor id=”1″]

 

Обновите манифест android приложения


Фильтры интентов сообщают системе, какие интенты компонент приложения готов принять. Подобно тому, как вы построили интент с действием ACTION_SEND в уроке Отправка простых данных в другие приложения , вы создаете фильтры интентов для того, чтобы иметь возможность получать интенты с этим действием. Вы определяете фильтр интентов в манифесте, используя <intent-filter> элемент. Например, если ваше приложение обрабатывает получение текстового содержимого, одно изображение любого типа, или нескольких изображений любого типа, ваш манифест будет выглядеть примерно так:

<activity android:name=".ui.MyActivity" >
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

 

Примечание: Для получения дополнительной информации о интентах и их соответствии фильтрам интентов, прочитайте Интенты и фильтры интентов

Когда другое приложение пытается поделиться любой из этих вещей, создавая интент и передавая его в startActivity(), ваше приложение будет перечислено в качестве опции в диалоге выбора. Если пользователь выбирает выше приложение, соответствующая активити(.ui.MyActivity в приведенном выше примере) будет запущена. Именно тогда вам необходимо обработать контент соответствующим образом в вашем коде и пользовательском интерфейсе.

[wpanchor id=”2″]

 

Обработка входящего контента в android приложениях


Чтобы обработать содержимое доставленное Intent, начните с вызова getIntent() для полученияIntent объекта. Как только у вас есть объект, вы можете просмотреть его содержимое, чтобы определить, что делать дальше. Имейте в виду, что если эта активити может быть запущена из других мест системы, таких как экран запуска приложений, то вам нужно будет принять это во внимание при рассмотрении интента.

void onCreate (Bundle savedInstanceState) {
    ...
    // Get intent, action and MIME type
    Intent intent = getIntent();
    String action = intent.getAction();
    String type = intent.getType();

    if (Intent.ACTION_SEND.equals(action) && type != null) {
        if ("text/plain".equals(type)) {
            handleSendText(intent); // Handle text being sent
        } else if (type.startsWith("image/")) {
            handleSendImage(intent); // Handle single image being sent
        }
    } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
        if (type.startsWith("image/")) {
            handleSendMultipleImages(intent); // Handle multiple images being sent
        }
    } else {
        // Handle other intents, such as being started from the home screen
    }
    ...
}

void handleSendText(Intent intent) {
    String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
    if (sharedText != null) {
        // Update UI to reflect text being shared
    }
}

void handleSendImage(Intent intent) {
    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    if (imageUri != null) {
        // Update UI to reflect image being shared
    }
}

void handleSendMultipleImages(Intent intent) {
    ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
    if (imageUris != null) {
        // Update UI to reflect multiple images being shared
    }
}

 

Внимание: Будьте особенно осторожны проверяя входные данные, вы никогда не знаете, что другие приложения могут вам отправить. Например, неправильный MIME тип может быть установлен, или отправленное изображение может быть чрезвычайно большим. Кроме того, помните о том, что обрабатывать двоичные данные лучше в отдельном потоке, а не основном потоке пользовательского интерфейса.

Обновление пользовательского интерфейса может быть простым, как заполнение EditText, или может быть более сложным, как применение интересного фото-фильтра для изображения. Что произойдет дальше, зависит от специфики вашего приложения.

Далее: Реализация простого обмена данными. Кнопка “поделиться” в android приложении

Додати коментар