Лучшая практика - добавление приложения в Android Share Menu

Мое приложение отправляет файлы (все типы MIME) по TCP-соединению, и поэтому я хотел, чтобы мое приложение появилось в меню Android Share.

Я добавил следующие фильтры намерений в свою активность вAndroidManifest.xml

<intent-filter ><!--intent filter for single file sharing-->
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="*/*" />
</intent-filter>
<intent-filter ><!--intent filter for sharing multiple files-->
    <action android:name="android.intent.action.SEND_MULTIPLE" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="*/*" />
</intent-filter>

Теперь я добавил это кActivity который должен быть запущен при нажатии кнопки «Поделиться»

Intent intent = getIntent();
if (Intent.ACTION_SEND.equals(intent.getAction())) {
    Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
    if (uri != null) {
        fileset = new HashSet();
        fileset.add(getPathfromUri(uri));
    }
} else if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) {
    ArrayList<Uri> uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
    if (uris != null) {
        fileset = new HashSet();
        for(Uri uri : uris) {
            fileset.add(getPathfromUri(uri));
        }
    }
}

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

public String getPathfromUri(Uri uri) {
    if(uri.toString().startsWith("file://")) {
         return uri.getPath();
    }
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    startManagingCursor(cursor);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String path= cursor.getString(column_index);
    //cursor.close();
    return path;
}

Вышеупомянутый метод правильно извлекает абсолютный путь к изображениям / видео и другим файлам. Есть что-то, что я пропустил, или есть лучший способ сделать это?

В добавок кShare меню, естьSend Via меню на моем телефоне. screenshot

Есть ли способ добавить мое приложение в этот список?

 jzafrilla21 нояб. 2012 г., 11:50
Ты пробовал это? intent.setType (& Quot;/& Quot;);
 coderplus28 мая 2012 г., 19:24
Я тоже так думаю, поскольку те, что в списке, являются приложениями по умолчанию, которые поставляются с ПЗУ. Это должно быть что-то, что Samsung добавил :) Спасибо за разъяснение
 Jason Robinson28 мая 2012 г., 19:22
AFAIK, есть только «Поделиться» меню. Этот список может быть пользовательским, так как я ожидаю, что Facebook, G +, Twitter будут отображаться в этом списке, в противном случае, если они у вас установлены.

Ответы на вопрос(3)

Решение Вопроса

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

Я также пытался связаться с Samsung, и они еще не ответили.

Я изложил здесь, как попасть в меню:

http://blog.blundellapps.com/add-your-app-to-the-android-menu/

В основном это ваш миметип/ :

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

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

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

Если вы делаете это, и он не отображается, это означает, что они используют меню намерений, и это пользовательский список общих ресурсов, поэтому вы не можете принудительно войти.

 25 нояб. 2017 г., 18:51
исправлено, был старый домен

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

<activity
            android:name=".SharePhotoFromOutSide"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.SEND" />

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

                <data android:mimeType="photo/*" />
            </intent-filter>
        </activity>
 coderplus06 нояб. 2013 г., 02:26
Я думаю, что ваш фильтр такой же, как мой, за исключением mimeType.Mine показывает меню общего доступа для всех типов файлов. Меню в моем исходном вопросе - это пользовательское меню Samsung, и я не думаю, что есть способ попасть в него, просто изменив Манифест. Есть ли mimeTypephoto/* существовать? Я бы использовалimage/* если бы я просто пытался поделиться только изображениями -en.wikipedia.org/wiki/Internet_media_type
 20 нояб. 2013 г., 09:29
/ определяет все типы файлов, но вы можете Photo / * для обмена фотографиями из-за пределов приложения. это хорошо работает на моей стороне.

Ваш ответ на вопрос