最佳实践 - 将您的应用程序添加到Android共享菜单

时间:2012-05-28 17:14:06

标签: android android-intent

我的应用程序通过TCP连接发送文件(所有mime类型),因此我希望我的应用程序出现在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

有没有办法让我的应用程序进入此列表?

3 个答案:

答案 0 :(得分:4)

我在这里概述了如何进入菜单:

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

基本上它是你的mimetype /

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

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

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

如果您这样做但它没有显示,则表示他们正在使用意向菜单,这是一个自定义共享列表,因此您无法强行进入。

答案 1 :(得分:2)

我认为您正在分享应用外部的图片。 plz在intentfiler中定义minetype。它在我这边工作得很好。

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

答案 2 :(得分:0)

我试图处理这个问题,我很确定三星的图库使用一些自定义动作通过该菜单进行共享。考虑到所有列出的应用程序都已预先安装,很明显三星同意所有列出的应用程序开发人员使用它的自定义意图操作。

我还试图联系三星,他们还没有回复。