【问题标题】:Xamarin.Android - Start service on Boot CompletedXamarin.Android - 启动时启动服务已完成
【发布时间】:2018-11-28 22:21:41
【问题描述】:

我正在尝试在我的设备启动时启动一项服务,但该服务从未启动。

我已添加:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

到 AndroidManifest.xml。我的 BroadcastReceiver 如下所示:

[BroadcastReceiver]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class BootReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        var start = new Intent(context, typeof(AlertSyncService));
        start.AddFlags(ActivityFlags.NewTask);
        context.StartService(start);
    }
}

我已经确认我的服务不是问题(通过单击按钮启动相同的服务进行测试 - 它工作正常)。问题肯定是 BroadcastReceiver 永远不会收到事件。我还确保在重新启动之前打开应用程序一次 - 我在类似的问题中看到这是必要的,因为应用程序安装在“停止状态”。

有没有人知道是什么导致这不起作用?我对此比较陌生,所以很可能我错过了一些明显的东西!

谢谢

【问题讨论】:

  • 我的头顶没有看到logcat 输出:[BroadcastReceiver(Enabled = true)] 查看此答案的测试(通过adb)部分:stackoverflow.com/a/47601952/4984832
  • @SushiHangover 我已经完成了 adb 测试,并认为这是问题所在:java.lang.RuntimeException: Unable to start receiver md527b6cae80f13bfed8573ffa181fefc60.BootReceiver: java.lang.IllegalStateException: Not allowed to start service Intent { flg=0x10000000 cmp=MyApp.MyApp/md527b6cae80f13bfed8573ffa181fefc60.AlertSyncService }: app is in background uid UidRecord{6ef4e91 u0a6 ... 但是,我不知道如何解决这个问题!有任何想法吗?我试过用ContextCompat.StartForegroundService(...) 运行它,但这有同样的问题。

标签: c# android xamarin android-intent broadcastreceiver


【解决方案1】:

你可以试试这个:

[BroadcastReceiver(Enabled = true, Exported = true, DirectBootAware = true)]
[IntentFilter(new string[] {
    Intent.ActionBootCompleted, Intent.ActionLockedBootCompleted, "android.intent.action.QUICKBOOT_POWERON"
})]
public class BootReceiver: BroadcastReceiver {
    public override void OnReceive(Context context, Intent intent) {
        //Do something
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多