SmsManager.SendMultimediaMessage 不再适用于 ContentProvider
SmsManager.SendMultimediaMessage no longer works with ContentProvider
在 Xamarin.Android 中,我设置了一个自定义 ContentProvider
,在发送 MMS 时向系统提供 PDU 文件:
[ContentProvider(new[] { Authority }, GrantUriPermissions = true)]
internal class MmsUploadContentProvider : ContentProvider
{
internal const string Authority = "my.package.name.mmsUploads";
public override ParcelFileDescriptor OpenFile(AndroidUri uri, string mode)
{
File uploadsDirectory = GetMmsUploadsDirectory(this.Context);
File file = new File(uploadsDirectory, uri.LastPathSegment);
ParcelFileDescriptor result = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);
return result;
}
}
我这样称呼SendMultimediaMessage
:
Uri contentProviderUri = Uri.Parse($"content://{MmsUploadContentProvider.Authority}/{pduFileName}");
smsManager.SendMultimediaMessage(this.Context, contentProviderUri, null, null, statusPendingIntent);
但是,当使用请求结果调用我的 BroadcastReceiver
时,它会收到一个 MMS_ERROR_IO_ERROR 结果代码。在文档中,它谈到了读取 PDU 的问题,所以我假设我的 ContentProvider
有问题。当我调试时,OpenFile
在我的 ContentProvider
中被调用,并且正确的 ParcelFileDescriptor
被返回就好了。
有人可以指出正确的方向来解决这个问题吗?几年前它曾经工作过,但 Android API 中一定发生了某些变化,导致它中断。
对于那些仍然感兴趣的人,最终的问题不是 ContentProvider
。问题是发送的文件比 MMS 在这种情况下允许的文件稍大。这将抛出 MMS_ERROR_IO_ERROR.
我想出的解决办法是先看看MMS_CONFIG_MAX_MESSAGE_SIZE returned, and gradually compress any media files until the message size went under that limit. I have witnessed that that limit might be lower than the actual maximum size allowed to be sent: I was able to send messages larger than this limit at times. To be on the safe side, I still recommend compressing the MMS up to the limit specified by MMS_CONFIG_MAX_MESSAGE_SIZE到底是什么。
在 Xamarin.Android 中,我设置了一个自定义 ContentProvider
,在发送 MMS 时向系统提供 PDU 文件:
[ContentProvider(new[] { Authority }, GrantUriPermissions = true)]
internal class MmsUploadContentProvider : ContentProvider
{
internal const string Authority = "my.package.name.mmsUploads";
public override ParcelFileDescriptor OpenFile(AndroidUri uri, string mode)
{
File uploadsDirectory = GetMmsUploadsDirectory(this.Context);
File file = new File(uploadsDirectory, uri.LastPathSegment);
ParcelFileDescriptor result = ParcelFileDescriptor.Open(file, ParcelFileMode.ReadOnly);
return result;
}
}
我这样称呼SendMultimediaMessage
:
Uri contentProviderUri = Uri.Parse($"content://{MmsUploadContentProvider.Authority}/{pduFileName}");
smsManager.SendMultimediaMessage(this.Context, contentProviderUri, null, null, statusPendingIntent);
但是,当使用请求结果调用我的 BroadcastReceiver
时,它会收到一个 MMS_ERROR_IO_ERROR 结果代码。在文档中,它谈到了读取 PDU 的问题,所以我假设我的 ContentProvider
有问题。当我调试时,OpenFile
在我的 ContentProvider
中被调用,并且正确的 ParcelFileDescriptor
被返回就好了。
有人可以指出正确的方向来解决这个问题吗?几年前它曾经工作过,但 Android API 中一定发生了某些变化,导致它中断。
对于那些仍然感兴趣的人,最终的问题不是 ContentProvider
。问题是发送的文件比 MMS 在这种情况下允许的文件稍大。这将抛出 MMS_ERROR_IO_ERROR.
我想出的解决办法是先看看MMS_CONFIG_MAX_MESSAGE_SIZE returned, and gradually compress any media files until the message size went under that limit. I have witnessed that that limit might be lower than the actual maximum size allowed to be sent: I was able to send messages larger than this limit at times. To be on the safe side, I still recommend compressing the MMS up to the limit specified by MMS_CONFIG_MAX_MESSAGE_SIZE到底是什么。