分享意图过滤器

时间:2016-12-27 17:16:38

标签: android android-intent android-manifest intentfilter

我正在构建一个允许人们互相分享应用的应用。我已经能够从这个应用程序内部执行此操作(我显示已安装的应用程序,用户可以选择他想要发送的那些),但现在我想分享未安装的apks,所以apk就在下载文件夹或类似的东西。

想象一下,你在下载文件夹中有一个apk,我希望能够通过按Share,进入我的应用程序并发送该apk。它就像任何其他共享(图像等)。

我能够让我的应用程序弹出可以共享该类型文件的应用程序列表(在本例中为.apk),就像在这张图片(下图)中一样,将其添加到我的清单中活动标签:

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

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

    <data android:mimeType="application/vnd.android.package-archive" />
</intent-filter>

Share image list

现在的问题是:

1 - 如何知道该人按下的文件的文件路径?

2 - 如果在清单上收到意图,如何将该文件路径传递给我的应用程序?

PS:请注意,目标是通过按分享来共享设备上任何文件夹中的apk(长按然后共享 - 取决于设备)。

提前感谢所有帮助。

3 个答案:

答案 0 :(得分:1)

您必须在某些活动上添加了intent过滤器。该活动将接收您可以使用Intent intent = getIntent()方法访问的意图。 See this doc。这回答了第2部分。

对于第一部分,我认为你可以做intent.getData().getPath()

答案 1 :(得分:0)

这是我点击shareContentProvider时共享数据的代码 我用它分享图像和文字

        Uri imageUri;
        Intent intent;

        imageUri = Uri.parse("android.resource://" + getPackageName() + "/drawable/" + "icon");
        intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_TEXT, "#periodicTable");
        intent.putExtra(Intent.EXTRA_STREAM, imageUri);
        intent.setType("image/*");
        startActivity(intent);

答案 2 :(得分:0)

很抱歉回答我自己的问题,但也许这将有助于将来的某些人。 我正在调试并查看附加内容,如果有什么,没有任何显示。 解决方案正在执行(ArrayList<Uri>) getIntent().getExtras().get("android.intent.extra.STREAM");,这将从意图中“刷新”Extras。我不知道为什么这些额外的东西最初没有出现,只有在得到额外的流之后,它才有效。 我使用了arraylist of uri's,因为在这种情况下我尝试使用send_multiple。如果您仅使用SEND,那么您不需要ArrayList部分。