共享意图过滤器
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
部分。
我正在构建一个允许人们相互共享应用程序的应用程序。我已经能够从这个应用程序内部执行此操作(我显示已安装的应用程序,用户可以 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
部分。