GCM:另一个BIND_JOB_SERVICE权限错误-JobIntentService的IntentService

时间:2018-08-07 18:04:01

标签: android google-cloud-messaging android-permissions android-8.0-oreo jobintentservice

问题:由于我现在需要以Oreo为目标来提交应用程序,因此我必须将RegistrationIntentService更改为继承自JobIntentService而不是IntentService。我仍在使用GCM,但这应该没有区别。请注意,这是Xamarin C#代码。

错误是我总是在我的静态EnqueueWork方法中得到一个异常:

计划的服务ComponentInfo {com.emergencyuniversity.EUAlert / md58d0653b4094c2dbc798f6d984e1c1386.RegistrationIntentService}不需要android.permission.BIND_JOB_SERVICE权限

我将OnHandleIntent更改为OnHandleWork,现在我在以前调用StartService的地方调用了静态EnqueueWork便捷方法。

var intent = new Intent (this, typeof (RegistrationIntentService));
RegistrationIntentService.EnqueueWork(this, intent); // instead of StartService(intent)

我的EnqueueWork,发生异常:

  public static void EnqueueWork(Context context, Intent work)
    {
        Java.Lang.Class cls = Java.Lang.Class.FromType(typeof(RegistrationIntentService));
        try
        {
            EnqueueWork(context, cls, GCMEUA_JOB_ID, work);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: {0}", ex.Message);
        }
    }

在清单中,我添加了:

<service android:name=".RegistrationIntentService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="true" />

我还尝试了导出false,并将该权限放置在多个不同的地方。

由于编译器错误,我进行的另一项更改是删除了以下内容:

public RegistrationIntentService() : base("RegistrationIntentService") { }

除了Android文档之外,我可能还阅读了所有可以想象得到的相关文章,包括:

https://android.jlelse.eu/keep-those-background-services-working-when-targeting-android-oreo-sdk-26-cbf6cc2bdb7f

https://medium.com/til-kotlin/jobintentservice-for-background-processing-on-android-o-39535460e060

JobService does not require android.permission.BIND_JOB_SERVICE permission

为什么我仍然会收到此错误?任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

好的,解决了。通过升级到Xamarin.GooglePlayServices.Gcm及其相关库的更高版本的NuGet包,解决了最后一个问题。现在一切正常。