【发布时间】:2020-03-30 13:32:15
【问题描述】:
我在 Xamarin.Android 中收到消息,我需要将其传递给 Xamarin.Forms 应用程序。我现在想出的是依赖注入。我已经定义了接口:
public interface IReceived
{
event OnReceived Received;
}
并且它在 IncomingSms 类中的实现继承自 BroadcastReceiver 用于消息监听
[assembly: Dependency(typeof(XxmsApp.Api.IncomingSms))]
namespace XxmsApp.Api
{
// [BroadcastReceiver(Enabled = true, Exported = true)]
[BroadcastReceiver(Enabled = true, Label = "SMS Receiver")]
[IntentFilter(new string [] { Telephony.Sms.Intents.SmsReceivedAction })] // "android.provider.Telephony.SMS_RECEIVED"
public class IncomingSms : BroadcastReceiver, IReceived
{
public event OnReceived Received;
public override void OnReceive(Context context, Intent intent)
{
if (intent.Action != Telephony.Sms.Intents.SmsReceivedAction) return;
SmsMessage[] messages = Telephony.Sms.Intents.GetMessagesFromIntent(intent);
OnMessagesReiceved(messages);
}
private void OnMessagesReiceved(SmsMessage[] messages)
{
var smsMesages = new List<(string Address, string Message)>();
var XMessages = new List<XxmsApp.Model.Message>();
for (var i = 0; i < messages.Length; i++)
{
smsMesages.Add((messages[i].OriginatingAddress, messages[i].MessageBody));
XMessages.Add(new XxmsApp.Model.Message
{
Address = messages[i].OriginatingAddress,
Value = messages[i].MessageBody
});
}
Received?.Invoke(XMessages);
}
}
}
我已经订阅了Received的活动
public App()
{
DBUpdates();
MainPage = (new MasterDetailPage()
{
Master = new MenuPage { Title = "Title" },
Detail = new NavigationPage(new XxmsApp.MainPage()) { BarBackgroundColor = Color.Black }
});
xMessages = DependencyService.Get<XxmsApp.Api.IReceived>();
xMessages.Received += XMessages_Received;//*/
}
private void XMessages_Received(IEnumerable<Model.Message> message)
{
// ...
}
它的工作没有一些错误。但是当提高线Received?.Invoke(XMessages); 收到总是null。而且我无法在我的主应用 Xamarin.Forms 中捕捉到事件(消息的时刻)
如何做到这一点?
【问题讨论】:
-
使用消息中心
-
@Jason,谢谢。我会这样看
标签: c# xamarin.forms dependency-injection xamarin.android