绑定 Evernote 的 android-job



是否有人对Evernote的Android-Job https://github.com/evernote/android-job?

有趣的Xamarin Docs在一个示例中提到:

https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/troubleshooting-bindings/#problem_name_collebist

我尝试关注https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-an-aar/,,2

xamarin在github上绑定了android-job

是什么?

Xamarin Android-Job绑定使您可以利用Evernote的Android-Job库来进行Android,在后台上有效地运行作业。该库在客户端设备上检查Android版本,以确定执行计划背景工作的最佳方法。它将使用最合适的OS方法,例如JobSchedulerGcmNetworkManagerAlarmManagerWorkManager

如何使用它:

步骤1:

下载Evernote的Android-Job库的Xamarin绑定。

步骤2:

发布模式构建绑定项目,然后从bin/release文件夹中获取android-job.dll文件。将此 dll 添加到您自己的项目中并引用它。

步骤3:

将以下内容添加到您的 Android清单中,在应用程序节点中,服务和接收器正常工作。

<service android:name="com.evernote.android.job.v21.PlatformJobService" android:exported="false" android:permission="android.permission.BIND_JOB_SERVICE"/>
<service android:name="com.evernote.android.job.v14.PlatformAlarmService" android:exported="false" android:permission="android.permission.BIND_JOB_SERVICE"/>
<service android:name="com.evernote.android.job.v14.PlatformAlarmServiceExact" android:exported="false"/>
<receiver android:name="com.evernote.android.job.v14.PlatformAlarmReceiver" android:exported="false">
  <intent-filter>
    <!-- Keep the filter for legacy intents -->
    <action android:name="com.evernote.android.job.v14.RUN_JOB"/>
    <action android:name="net.vrallev.android.job.v14.RUN_JOB"/>
  </intent-filter>
</receiver>
<receiver android:name="com.evernote.android.job.JobBootReceiver" android:exported="false">
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"/>
    <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
    <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
    <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
  </intent-filter>
</receiver>
<service android:name="com.evernote.android.job.gcm.PlatformGcmService" android:enabled="false" android:exported="true" android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
  <intent-filter>
    <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/>
  </intent-filter>
</service>
<service android:name="com.evernote.android.job.JobRescheduleService" android:exported="false" android:permission="android.permission.BIND_JOB_SERVICE"/>

另外,请确保您有以下权限:

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

步骤4:

确保项目中有以下参考(可以通过Nuget安装):

  • xamarin.android.support.compat
  • xamarin.android.support.v4
  • xamarin.googleplayservices.gcm (不需要,但会更好,并且支持更多设备)

步骤5:

为您的工作创建一个将要安排的课程:

提示:请参阅Android-Job GitHub页面,以示例使用不同类型的作业,即定期,一次性,等等。

using Com.Evernote.Android.Job;
namespace MyNamespace
{
    public class MyJob : Job
    {
        public const String TAG = "job_myjob_tag";
        protected override Result OnRunJob(Params parameters)
        {
            // run your job here   
            return Result.Success;
        }
        public static void ScheduleJob()
        {
            new JobRequest.Builder(MyJob.TAG)
                .SetRequiresDeviceIdle(false)
                .SetRequiredNetworkType(JobRequest.NetworkType.Connected)
                .SetPeriodic(900000, 300000)
                .SetUpdateCurrent(true)
                .Build()
                .Schedule();
        }
        private void CancelJob(int jobId)
        {
            JobManager.Instance().Cancel(jobId);
        }
    }
}

步骤6:

为您的工作创建工厂方法:

using Com.Evernote.Android.Job;
namespace MyNamespace
{
    public class MyJobCreator : Java.Lang.Object, IJobCreator
    {
        public Job Create(string tag)
        {
            switch (tag)
            {
                case MyJob.TAG:
                    return new MyJob();
                default:
                    return null;
            }
        }
    }
}

步骤7:

初始化JobManager单例,理想情况下,在您的GlobalApplication.OnCreate方法中。如果不能,有其他选择。

JobManager.Create(this).AddJobCreator(new MyJobCreator());

步骤8:

安排您的工作!您可以从启动活动OnCreate方法或任何喜欢的地方来执行此操作。例如:

MyNamespace.MyJob.ScheduleJob();

提示:

  1. OnRunJob(...)方法中完成的工作应同步,或者在所有工作完成之前不返回Result
  2. 请注意不要多次实例化同一工作。在工作构建器上使用SetUpdateCurrent,或通过调用JobManager.Instance().GetAllJobRequestsForFlag(MyJob.TAG)
  3. 检查作业是否已经存在。

信用&amp;参考:

  • 对Android-Job Xamarin.Android Binding和Android清单配置指令表示感谢Dooks123。
  • 信用Android-Job库Evernote

最新更新