1

这是我在这个论坛上的第一篇文章,因此任何关于如何使问题更易于理解/可读等的提示都值得赞赏。

我在做什么?

我正在使用 Xamarin Forms 制作我的第一个应用程序,并且我有两个项目,PCL(便携式类库)和 Android。我的 Android 项目接收来自特定号码的传入短信并将其保存到字符串中。我想要实现的是,通过使用 MessagingCenter,将字符串从我的 Android 项目发送到我的 PCL。

我的问题:

我已经看到了很多关于此的线程,但是我缺少一些东西。而且因为我是这个论坛的新手,所以我不能写评论,所以我必须创建自己的问题。让我给你看一些代码。(parsedsms是包含短信的字符串)

SmsReceiver.cs(在我的 Android 项目中)

MessagingCenter.Send<SmsReceiver, string> (this, "ParsedSmsReceived", parsedsms);

MissionPage.xaml.cs(在我的 PCL 项目中)

MessagingCenter.Subscribe<SmsReceiver, string> (this, "ParsedSmsReceived",
(sender, arg) => 
{ 
    string message = arg; 
});

这是我在 Stackoverflow 上的另一个线程上找到的示例。我的问题是parsedsms不能从 PCL 访问。如何从我的 PCL 访问 SmsReceiver 类?您不能将 PCL 的引用(因为我猜它是一个库)添加到 Android,只能反过来。

4

2 回答 2

3

正如@Jason 在评论中所写,解决方案是使用Object而不是SmsReceiver这样:

短信接收器.cs

MessagingCenter.Send<Object, string> (this, "ParsedSmsReceived", parsedsms);

MissionPage.xaml.cs

MessagingCenter.Subscribe<Object, string> (this, "ParsedSmsReceived",
(sender, arg) => 
{ 
    string message = arg; 
});

这很好用,但是如果 MessagingCenter 真的是正确的方法,那就是另一个问题了。正如@Csharpest 评论的那样,使用 DependencyService 可能是一个更好的解决方案。

于 2018-03-10T17:52:31.647 回答
0

该界面可以更好地管理消息。

PCL 中的ISmsReceiver.cs

public interface ISmsReceiver {}

Android中的SmsReceiver.cs

[assembly: Dependency(typeof(SmsReceiver ))]
namespace App1.MobileApp.Droid
{
    public class SmsReceiver : BroadcastReceiver, ISmsReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            MessagingCenter.Send<ISmsReceiver, string> (this, "ParsedSmsReceived", parsedsms);
        }
    }
}

PCL 中的MissionPage.xaml.cs

MessagingCenter.Subscribe<ISmsReceiver, string> (this, "ParsedSmsReceived",
(sender, arg) => 
{ 
    string message = arg; 
});
于 2020-03-19T13:44:42.133 回答