从本地文件夹将图像发送到环聊

时间:2016-04-09 17:36:18

标签: java c# android xamarin.android android-6.0-marshmallow

我正在尝试从我正在构建的应用中向Hangouts发送图片。 我在Xamarin为VS 2015工作,所以下面的代码是c#,但它与等效的Java代码差别不大,所以我觉得很容易理解。

我所做的是在我的应用上设置一个按钮,其中包含设置Intent的代码,以便将图像分享到环聊。我已将图像设置在设备上的“下载”文件夹中,并将名称硬编码到代码中。

Intent hangoutsShareIntent = new Intent(Intent.ActionSend); 
hangoutsShareIntent.SetType("image/jpeg");
hangoutsShareIntent.SetPackage("com.google.android.talk");

string downloadsPath = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;
string filePath = Path.Combine(downloadsPath, "shared.jpg");

hangoutsShareIntent.PutExtra(Intent.ExtraStream, filePath);
StartActivity(Intent.CreateChooser(hangoutsShareIntent, "Share with"));

当我运行此功能时,我可以选择在环聊中选择要发送内容的聊天。选择聊天后,我会收到一个空白消息框,没有图像。

我已将上述代码交换为使用text/plain并将filePath变量传递给邮件。当我将文件路径复制到Chrome中进行检查时,图像会加载,所以我必须确定图像是我说过的地方......对吗?

我没有错误(可能是因为问题出在环聊而不是我的应用程序,所以我没有任何调试)。 Logcat没有显示任何内容,除了我在Google上找不到的错误:ExternalAccountType﹕ Unsupported attribute readOnly

我在该错误上找到的唯一信息意味着权限存在一些问题,但我确保我的应用程序使用此代码检查了读/写的运行时权限(包含上述内容):

if ((CheckSelfPermission(Permission.ReadExternalStorage) == (int)Permission.Granted) &&
(CheckSelfPermission(Permission.WriteExternalStorage) == (int)Permission.Granted))

注意:我在HTC One M8上运行 - 没有SD卡,但设备上有外部存储设备。我还为早期Android版本的清单添加了上述权限。

这个文档(here)也没有太大的帮助,所以欢迎任何建议在这里:)

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您使用文件提供程序而不是仅发送URI本身。这应该解决您所看到的权限问题。

有一本可用的指南post可能很有用。

Intent shareIntent = new Intent(Intent.ActionSend);
shareIntent.SetType("image/gif");

Java.IO.File file = new Java.IO.File(Android.OS.Environment.ExternalStorageDirectory + "/myimage.gif");
Android.Net.Uri fileUri = Android.Support.V4.Content.FileProvider.GetUriForFile(this, "com.myfileprovider", file);

shareIntent.SetPackage("com.google.android.talk");
shareIntent.AddFlags(ActivityFlags.GrantReadUriPermission);
shareIntent.PutExtra(Intent.ExtraStream, fileUri);

StartActivity(Intent.CreateChooser(shareIntent, "Share with"));