xamarin.android接收器出现BOOT_COMPLETED错误

Grz*_* G. 4 c# service android visual-studio xamarin

我正在尝试创建一个以设备启动开始的简单服务.事情是设备返回消息"不幸的是,[app_name]已停止."

我几个小时都在努力解决这个问题,寻找错误,但这太简单了.希望,你们可以帮我解决这个问题.

这是我的代码:

AndroidManifest.xml中

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

<application android:allowBackup="true" android:label="@string/app_name">


    <receiver android:name=".StartReceiver">
          <intent-filter>
              <action android:name="android.intent.action.BOOT_COMPLETED"/>
          </intent-filter>
    </receiver>

  <service android:name=".PService" />
</application>
Run Code Online (Sandbox Code Playgroud)

StartReceiver.cs

[BroadcastReceiver]
[IntentFilter(new[] { Intent.ActionBootCompleted })]
public class StartReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        Intent startIntent = new Intent(context, typeof(PService));
        context.StartService(startIntent);
    }
}
Run Code Online (Sandbox Code Playgroud)

最后是PService.cs

[Service]
    public class PService : Service
    {
        public override void OnCreate()
        {
            base.OnCreate();
        }

        public override IBinder OnBind(Intent intent)
        {
            return null;
        }


        public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
        {
            Toast.MakeText(this, "Start", ToastLength.Short).Show();
            return StartCommandResult.Sticky;
        }

        public override void OnDestroy()
        {
            base.OnDestroy(); 

            Toast.MakeText(this, "Stop", ToastLength.Short).Show();
        }
    }
Run Code Online (Sandbox Code Playgroud)

此附加服务应用程序的目标是API 19(4.4.2 KitKat)Android版本.

我认为我会犯很小的错误,但我真的无法找到它..提前感谢任何帮助.

Sus*_*ver 8

通过在清单中添加接收器并通过BroadcastReceiverAttribute,您的清单中有两个接收器.另外,清单中的那个不会起作用,因为它不是默认情况下Xamarin创建的基于MD5的Java名称.

通过属性

1)从清单中删除接收方和引导权限

2)通过属性添加启动权限)

[assembly: UsesPermission(Manifest.Permission.ReceiveBootCompleted)]
Run Code Online (Sandbox Code Playgroud)

3)通过属性添加清单条目:

[BroadcastReceiver(Enabled = true)]
[IntentFilter(new[] { Intent.ActionBootCompleted })]    
public class BootBroadcastReceiver : BroadcastReceiver
Run Code Online (Sandbox Code Playgroud)

通过清单

1)添加引导权限的清单条目

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
Run Code Online (Sandbox Code Playgroud)

2)添加接收器并使用完全限定的Java类名:

<receiver android:name="com.yourpackagename.app.BootBroadcastReceiver">
      <intent-filter>
          <action android:name="android.intent.action.BOOT_COMPLETED"/>
      </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

3)为清单中使用的完全限定Java类名添加Name参数BroadcastReceiverAttribute

[BroadcastReceiver(Name = "com.yourpackagename.app.BootBroadcastReceiver", Enabled = true)]
[IntentFilter(new[] { Intent.ActionBootCompleted })]    
public class BootBroadcastReceiver : BroadcastReceiver
Run Code Online (Sandbox Code Playgroud)