使用MessagingCenter将字符串从Android项目发送到PCL

时间:2018-03-09 13:37:34

标签: c# xaml xamarin xamarin.forms messagingcenter

这是我在这个论坛上的第一篇文章,所以有关如何使问题更容易理解/可阅读的任何提示,我们表示赞赏。

我在做什么?

我正在使用Xamarin Forms创建我的第一个应用程序,我有两个项目,PCL(可移植类库)和Android。我的Android项目接收来自特定号码的传入SMS并将其保存为字符串。我想要实现的是,通过使用MessagingCenter,将我的Android项目中的字符串发送到我的PCL。

我的问题:

我已经看到了很多关于这个问题的线索,但是我有些遗漏。因为我是这个论坛的新手,所以我不能写评论,所以我必须创建自己的问题。我来告诉你一些代码。 (parsedsms是包含SMS的字符串)

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上的另一个线程上找到的示例。我的问题是无法从PCL访问parsedsms。如何从PCL访问SmsReceiver类?你不能在PC上添加PCL的引用(因为它是我猜的库),只是反过来。

2 个答案:

答案 0 :(得分:2)

正如@Jason在评论中写道,解决方案是使用for (int i = 0; i <= 9; i++) { for (int i2 = 0; i2 <= 7; i2++) { string tbName = "textBox" + i.ToString() + i2.ToString(); [buttonName].Text="someting"; } } 代替Object,如下所示:

SmsReceiver.cs

SmsReceiver

MissionPage.xaml.cs

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

这很好用,但如果MessagingCenter实际上是正确的方法则是另一个问题。正如@Csharpest使用DependencyService评论可能是一个更好的解决方案。

答案 1 :(得分: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; 
});