Android Поделиться через диалог - PullRequest
53 голосов
/ 24 августа 2010

Я видел диалоги "поделиться через", которые есть в таких приложениях, как TFLN (тексты с прошлой ночи).Похоже на это: поделиться диалогом http://garr.me/wp-content/uploads/2009/12/sharevia.jpg

Я хочу поделиться текстом.Может ли кто-нибудь указать мне правильное направление?Это сделано с намерениями?

Ответы [ 4 ]

109 голосов
/ 24 августа 2010

Это действительно делается с помощью Intents.

Для обмена изображением, как в примере с изображением, это будет примерно так:

Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/jpeg");

share.putExtra(Intent.EXTRA_STREAM,
  Uri.parse("file:///sdcard/DCIM/Camera/myPic.jpg"));

startActivity(Intent.createChooser(share, "Share Image"));

Для текста вы будете использовать что-то вроде:

Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(Intent.EXTRA_TEXT, "I'm being sent!!");
startActivity(Intent.createChooser(share, "Share Text"));
6 голосов
/ 24 ноября 2012

У меня были проблемы с принятым ответом. Для меня работало создание файла по пути, а затем анализ URI файла, например:

Uri.fromFile(new File(filePath));

вместо

Uri.parse(filePath)

На всякий случай, если у кого-то такая же проблема.

4 голосов
/ 24 августа 2010

Да. Вам нужно предоставить Activity с фильтром намерений, который может обрабатывать объекты типа MIME image / jpeg (скажем, если вы хотите поддерживать совместное использование изображений JPEG), а также действие предположительно ACTION_SEND.

Многие из встроенных приложений Android являются открытыми, вы можете проверить файл манифеста приложения Messaging, чтобы увидеть, какие фильтры намерений оно использует.

0 голосов
/ 10 октября 2018

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

Обновите свой манифест

<activity android:name=".ui.MyActivity" >
//To receive single image
<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="image/*" />
</intent-filter>
//To receive multiple images
<intent-filter>
    <action android:name="android.intent.action.SEND_MULTIPLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="image/*" />
</intent-filter>

Обработка входящего контента

public class MyActivity extends AppCompactActivity {

    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 (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
            }
        }
    }

    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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...