共享意图过滤器

Share intent filter

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

假设您在“下载”文件夹中有一个 apk,我希望能够通过按“共享”进入我的应用并发送该 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>

现在的问题是:

1 - 我如何知道此人按下共享的文件的文件路径?

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

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

在此先感谢您的所有帮助。

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

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

这是我在单击 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);

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