我正在使用Android的默认分享意图将图片分享给其他应用。但我想添加一个像Save to Gallery
这样的选项,可以将图片直接保存到媒体或图片中的图库或我的应用程序文件夹中。
目前我正在使用简单的代码来共享图片:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, "Share to"));
当我从个人资料图片中尝试WhatsApp的分享按钮时,可以选择" Save To Gallery
"选项。现在,我开始知道,它不是预先构建的android。这是WhatsApp添加的手动操作,它以某种方式将图像保存到特定路径。长期按下" Save to gallery
"按钮显示,该操作是WhatsApp的应用程序。这意味着WhatsApp为它编写了一些逻辑。它与ACTION_SEND
mime类型具有相同的默认image/*
意图,并带有其他自定义操作" Save to Gallery
"。
那完全没问题。我也希望为我的应用添加这种逻辑。我可以注册可以处理此操作的<intent-filter>
,但它会全局接受来自任何应用的任何图像以保存到图库。
如何为我的共享Intent或<intent-filter>
活动添加手动操作,该活动仅限于我的应用(仅限我的应用可见)并用于将图像保存到图库?
答案 0 :(得分:5)
以下代码段执行以下操作: 首先,我们正在查询系统中的IntentActivities,它可以处理我们的Share-Intent。之后,我们构建了一个LabeledIntents列表。最后,我们将自定义共享操作添加到此列表中,我们将使用默认选择器对话框向用户显示列表。
<h:form id="agruparCVForm" styleClass="validacionform" enctype="multipart/form-data">
<p:messages id="messages" showDetail="false" autoUpdate="true" closable="true" escape="false"/>
<fieldset>
<div class="col">
<div class="dtPadding_bottom">
<p class="parrafoMargintop1em textSmall">
<h:outputText value="#{comunidadesBundle.textoAdjuntarDocumentoAsociar}" escape="false"/>
</p>
<p:fileUpload value="#{agruparComunidadController.comunidadAAgrupar.documentoAutorizacion}" mode="simple" skinSimple="true" required="true"/>
</div>
</div>
</fieldset>
<div class="float-cleaner marginTopBottom2em"></div>
<!-- Botones-->
<div class="ftr">
<h:commandButton value="#{comunidadesBundle.guardarCambiosBtn}" title="#{comunidadesBundle.guardarCambiosBtn}" action="#{agruparComunidadController.agrupar}" styleClass="buttonContrast azul textSmaller MarginBottom2em floatRMobile"/>
</div>
</h:form>