如何在另一个项目Xamarin项目中包含BroadcastReceiver?

时间:2016-09-05 05:22:12

标签: xamarin xamarin.android broadcastreceiver

我正在Xamarin中编写一个跨平台的解决方案,并且即将为第三方集成添加一个母项目(例如,其他需要在Android上使用Intent与我的应用集成的Android方)。 / p>

但是我想保持我现在“干净”的跨平台设置,只需添加一个带有第三方集成代码的新Android类库。但是,我似乎无法将我的第三方集成项目中的BroadcastReceiver包含在我的“主要”Android应用程序项目中。

我已经添加了对第三方集成项目的引用,但这显然还不够......我可以在主Android-app项目中添加我的BroadcastReceiver,这样我就可以了,但是我真的很想保留第三方的东西,因为我可以很好地在未来为其他目的添加其他集成机制,然后又想把它们放在另一个项目中。

有什么建议吗?目前,在编译主android项目时,第三方项目似乎甚至没有自动编译。

EDIT;

我的BroadcastReceiver将属性用作“推荐”;

[BroadcastReceiver(Enabled = true)]
[IntentFilter(new[] { "se.millsys.integration.MyIntegrationIntent" })]
public class IntegrationBroadcastReceiver : BroadcastReceiver
{
    private static string DEBUG_TAG = "IntegrationBroadcastReceiver";

    public override void OnReceive(Context context, Intent intent)
    {
    }
}

1 个答案:

答案 0 :(得分:2)

假设此设置:

├── DroidMainApp
│   └── MyBroadcastReceiver (A Project level reference to DroidMainApp)
├── ADifferentApp

DroidMainApp

  • 模板创建Android应用
  • 包裹名称com.sushihangover.toaster

MyBroadcastReceiver

  • 模板创建了Android库项目
  • 包含一个C#文件/类
  • BroadcastReceiver名为com.sushihangover.toaster.receiver
  • BroadcastReceiver是EnabledExported
[BroadcastReceiver(Name = "com.sushihangover.toaster.receiver", Enabled = true, Exported = true)]
public class Toaster : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        Toast.MakeText(context, "Go make some toast", ToastLength.Long).Show();
        Log.Info("SO", "Go make some toast");
    }
}

一个不同的应用程序调用DroidMainApp的BroadcastReceiver

  • 使用Explicit意图
var toasterIntent = new Intent();
toasterIntent.SetClassName("com.sushihangover.toaster", "com.sushihangover.toaster.receiver");
var pendingIntent = PendingIntent.GetBroadcast(this, 0, toasterIntent, PendingIntentFlags.CancelCurrent);
var alarmService = (AlarmManager)GetSystemService(Context.AlarmService);
alarmService.SetRepeating(AlarmType.Rtc, 1000, 60000, pendingIntent);