Xamarin Android:从另一个应用程序获取一个应用程序的状态信息

时间:2018-12-18 21:54:57

标签: android xamarin android-intent xamarin.android android-broadcastreceiver

我有两个Xamarin Android应用程序-我们称它们为“ Archy”和“ Mehitabel”。

Archy具有一些持久状态信息(为了便于说明,它位于SQLite DB中)。

如果Mehitabel发生某件事,她需要知道一些状态信息。

为了完成这一壮举,我让Mehitabel向Archy发送了一份意向书。阿奇有一个广播接收器,可以听到它,收集必要的状态,然后向梅希塔贝尔发射不同的意图。

这是Archy的代码:

private static final Predicate IS_CORRECT = Predicate.isEqual(correctAnswer)

这是Mehitabel的代码:

[BroadcastReceiver(Enabled = true)]
[IntentFilter(new [] { "com.example.Archy.SendStateToMehitabel"})]
public class StateQueryReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        var msg = new Intent("com.example.Mehitabel.StateFromArchy");
        msg.PutExtra("ImportantStateInfo", GetSomeState());
        context.SendBroadcast(msg);
    }
}

如果Archy实际上正在运行(即显示在“最近”列表中),那么一切都很好。如果Archy没有运行,则Archy的接收者代码将永远不会执行,Mehitabel也会超时。

我希望我缺少一些简单的东西(例如,接收者属性之一中的标志,或者com.example.Archy.SendStateToMehitabel意图中的一些秘密调味料。)

你能告诉我我在这里想念什么吗?

我是否需要使用一种完全不同的方法(例如在Archy中进行Mehitabel StartActivityForResult()活动,或使用在启动时一直运行并一直运行的服务)?

1 个答案:

答案 0 :(得分:0)

根据我的研究,我认为您可以在需要Mehitabel中的数据之前打开Archy。这是有关使用代码打开应用程序的演示。

 Intent launchIntent = PackageManager.GetLaunchIntentForPackage("NewTestApp.NewTestApp");
            if (launchIntent != null)
            {
                StartActivity(launchIntent);

            }

注意:NewTestApp.NewTestApp是Archy的软件包名称。