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

cod*_*lus 23 android android-intent

我的应用程序通过TCP连接发送文件(所有mime类型),因此我希望我的应用程序出现在Android Share菜单中.

我在我的Activity中添加了以下intent过滤器 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>
Run Code Online (Sandbox Code Playgroud)

现在我将其添加到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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用此方法生成要共享的文件的绝对路径.

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;
}
Run Code Online (Sandbox Code Playgroud)

上面的方法正确地检索了图像/视频和其他文件的绝对路径.是否有一些我错过了或者有更好的方法吗?

除了Share菜单,Send Via我的手机上还有一个菜单. 截图

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

Blu*_*ell 5

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

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>
Run Code Online (Sandbox Code Playgroud)

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


rus*_*t0R 1

我尝试解决这个问题,并且我非常确定三星的图库使用一些自定义操作通过该菜单进行共享。考虑到所有列出的应用程序都是预安装的,很明显三星同意所有列出的应用程序开发人员使用其自定义意图操作。

我也尝试联系三星,但他们还没有回复。