如何在不同的项目 Xamarin 项目中包含 BroadcastReceiver?
How to include a BroadcastReceiver in a different project Xamarin project?
我正在 Xamarin 中编写一个跨平台解决方案,并准备为第 3 方集成添加一个母项目(例如,其他 Android 方想要使用 intents 与我的应用程序集成仅在 Android 上)。
但我想保留我现在的跨平台设置 "clean" 并简单地添加一个新的 Android class 库和第 3 方集成代码。但是,我似乎无法将我的第 3 方集成项目中的 BroadcastReceiver 包含在我的 "main" android 应用程序项目中。
我已经添加了对第 3 方集成项目的引用,但这显然是不够的...我可以只在主 Android-app 项目中添加我的 BroadcastReceiver,那将是我想一切都很好,但我真的很想将第 3 方的东西隔离开来,因为我可以很好地想象将来为其他目的添加其他集成机制,然后也希望将它们保留在另一个项目中。
有什么建议吗?目前,在编译主 android 项目时,第三方项目似乎甚至没有自动编译。
编辑;
我的 BroadcastReceiver 使用属性作为 "recommended";
[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)
{
}
}
假设此设置:
├── DroidMainApp
│ └── MyBroadcastReceiver (A Project level reference to DroidMainApp)
├── ADifferentApp
DroidMainApp
- 已创建模板 Android 应用程序
com.sushihangover.toaster
的软件包名称
MyBroadcastReceiver
- 模板已创建Android图书馆项目
- 包含一个 C# file/class
- BroadcastReceiver 被命名为
com.sushihangover.toaster.receiver
- BroadcastReceiver 是
Enabled
和 Exported
[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);
我正在 Xamarin 中编写一个跨平台解决方案,并准备为第 3 方集成添加一个母项目(例如,其他 Android 方想要使用 intents 与我的应用程序集成仅在 Android 上)。
但我想保留我现在的跨平台设置 "clean" 并简单地添加一个新的 Android class 库和第 3 方集成代码。但是,我似乎无法将我的第 3 方集成项目中的 BroadcastReceiver 包含在我的 "main" android 应用程序项目中。
我已经添加了对第 3 方集成项目的引用,但这显然是不够的...我可以只在主 Android-app 项目中添加我的 BroadcastReceiver,那将是我想一切都很好,但我真的很想将第 3 方的东西隔离开来,因为我可以很好地想象将来为其他目的添加其他集成机制,然后也希望将它们保留在另一个项目中。
有什么建议吗?目前,在编译主 android 项目时,第三方项目似乎甚至没有自动编译。
编辑;
我的 BroadcastReceiver 使用属性作为 "recommended";
[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)
{
}
}
假设此设置:
├── DroidMainApp
│ └── MyBroadcastReceiver (A Project level reference to DroidMainApp)
├── ADifferentApp
DroidMainApp
- 已创建模板 Android 应用程序
com.sushihangover.toaster
的软件包名称
MyBroadcastReceiver
- 模板已创建Android图书馆项目
- 包含一个 C# file/class
- BroadcastReceiver 被命名为
com.sushihangover.toaster.receiver
- BroadcastReceiver 是
Enabled
和Exported
[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);