使用 Codename One 分享按钮时,没有应用程序可以在 Android 上执行此操作
Getting no application can do this action on Android while using Codename One share button
My Codename One 应用程序具有一个 ShareButton
,其用法如下:
// Share this report on social networks (text plus screenshot)
ShareButton shareReportButton = new ShareButton();
shareReportButton.setText("Share this report!");
shareReportButton.getAllStyles().setBorder(
RoundBorder.create().rectangle(true));
FontImage.setMaterialIcon(shareReportButton, FontImage.MATERIAL_SHARE);
shareReportButton.getStyle().setBgColor(ParametresGeneraux.accentColor);
shareReportButton.getPressedStyle().setBgColor(ParametresGeneraux.darkPrimaryColor);
shareReportButton.setTextToShare("I reported this via the great app ABCD "!"
);
shareReportButton.setImageToShare(currentReport.getPhotoPath(), ImageIO.FORMAT_PNG);
我在模拟器下按预期工作,但在实际的 Android 4.4 设备上我得到一个带有 "No app can do this action" 的对话框菜单。
请注意,可以与本机应用程序共享照片等。
我找不到任何要添加的构建提示 in the doc。我应该怎么做才能使共享按钮提供一种在社交网络上共享文本 + 照片的方式?
感谢任何帮助,
此致
编辑
根据@James H 和@Diamond 的回答,图像类型必须设置为mime 类型。因此,将 ImageIO.FORMAT_PNG 替换为 "image/jpg" 会填充共享菜单。
为了完整起见,请注意如文档中所述
an image must be stored using the FileSystemStorage API and shouldn't use a different API like Storage!
因此,即使照片在缓存中,您也必须将其复制到您的主文件夹,然后在 ShareButton 中使用此复制版本。
我认为问题可能在于
setImageToShare(String imagePath, String imageMimeType)
正在寻找不同格式的 Mime 描述,例如:"image/png"
我不确定 ImageIO.FORMAT_PNG 是否以这种方式工作。查看 JavaDoc 中的示例,它使用:
sb.setImageToShare(imageFile, "image/png");
使用本机共享功能并通过执行以下操作检查是否支持本机共享:
// Share this report on social networks (text plus screenshot)
Button shareReportButton = new Button("Share this report!");
shareReportButton.getAllStyles().setBorder(create().rectangle(true));
FontImage.setMaterialIcon(shareReportButton, FontImage.MATERIAL_SHARE);
shareReportButton.getStyle().setBgColor(ParametresGeneraux.accentColor);
shareReportButton.getPressedStyle().setBgColor(ParametresGeneraux.darkPrimaryColor);
shareReportButton.addActionListener(e -> {
if (Display.getInstance().isNativeShareSupported()) {
Display.getInstance().share("I reported this via the great app ABCD ", currentReport.getPhotoPath(), "image/png"); // Or "image/jpg"
} else {
ToastBar.showErrorMessage("Your phone doesn't support sharing...");
}
});
My Codename One 应用程序具有一个 ShareButton
,其用法如下:
// Share this report on social networks (text plus screenshot)
ShareButton shareReportButton = new ShareButton();
shareReportButton.setText("Share this report!");
shareReportButton.getAllStyles().setBorder(
RoundBorder.create().rectangle(true));
FontImage.setMaterialIcon(shareReportButton, FontImage.MATERIAL_SHARE);
shareReportButton.getStyle().setBgColor(ParametresGeneraux.accentColor);
shareReportButton.getPressedStyle().setBgColor(ParametresGeneraux.darkPrimaryColor);
shareReportButton.setTextToShare("I reported this via the great app ABCD "!"
);
shareReportButton.setImageToShare(currentReport.getPhotoPath(), ImageIO.FORMAT_PNG);
我在模拟器下按预期工作,但在实际的 Android 4.4 设备上我得到一个带有 "No app can do this action" 的对话框菜单。
请注意,可以与本机应用程序共享照片等。
我找不到任何要添加的构建提示 in the doc。我应该怎么做才能使共享按钮提供一种在社交网络上共享文本 + 照片的方式?
感谢任何帮助,
此致
编辑
根据@James H 和@Diamond 的回答,图像类型必须设置为mime 类型。因此,将 ImageIO.FORMAT_PNG 替换为 "image/jpg" 会填充共享菜单。
为了完整起见,请注意如文档中所述
an image must be stored using the FileSystemStorage API and shouldn't use a different API like Storage!
因此,即使照片在缓存中,您也必须将其复制到您的主文件夹,然后在 ShareButton 中使用此复制版本。
我认为问题可能在于
setImageToShare(String imagePath, String imageMimeType)
正在寻找不同格式的 Mime 描述,例如:"image/png"
我不确定 ImageIO.FORMAT_PNG 是否以这种方式工作。查看 JavaDoc 中的示例,它使用:
sb.setImageToShare(imageFile, "image/png");
使用本机共享功能并通过执行以下操作检查是否支持本机共享:
// Share this report on social networks (text plus screenshot)
Button shareReportButton = new Button("Share this report!");
shareReportButton.getAllStyles().setBorder(create().rectangle(true));
FontImage.setMaterialIcon(shareReportButton, FontImage.MATERIAL_SHARE);
shareReportButton.getStyle().setBgColor(ParametresGeneraux.accentColor);
shareReportButton.getPressedStyle().setBgColor(ParametresGeneraux.darkPrimaryColor);
shareReportButton.addActionListener(e -> {
if (Display.getInstance().isNativeShareSupported()) {
Display.getInstance().share("I reported this via the great app ABCD ", currentReport.getPhotoPath(), "image/png"); // Or "image/jpg"
} else {
ToastBar.showErrorMessage("Your phone doesn't support sharing...");
}
});