有没有人为Evernote的
android-job
https://github.com/evernote/android-job工作?
Funnily Xamarin docs在一个例子中提到它:
我试图遵循https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-an-aar/但它不会生成JobManager类
最佳答案 Xamarin绑定在GitHub上的android-job
它是什么?
Xamarin Android-Job binding允许您使用Evernote’s android-job library for Android,有效且稳健地在后台运行作业.库检查客户端设备上的Android版本,以确定执行预定后台工作的最佳方法.它将使用最合适的操作系统方法,如JobScheduler,GcmNetworkManager,AlarmManager或WorkManager.
如何使用它:
步骤1:
下载Xamarin binding for Evernote’s android-job library.
第2步:
在发布模式下构建绑定项目,然后从bin / release文件夹中获取android-job.dll文件.将此dll添加到您自己的项目并引用它.
第3步:
将以下内容添加到Application Manifest中的Application节点中,以使服务和接收器正常工作.
<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 page,即定期,一次性等.
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步:
为Job / s创建工厂方法:
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方法中.如果你不能,那就是alternative.
JobManager.Create(this).AddJobCreator(new MyJobCreator());
第8步:
安排你的工作!您可以从您的启动活动OnCreate方法或您喜欢的任何位置执行此操作.例如:
MyNamespace.MyJob.ScheduleJob();
提示:
>在OnRunJob(…)方法中完成的工作应该是同步的,否则在完成所有工作之前不会返回结果.
>注意不要多次实例化同一个作业.利用在工作建设者SetUpdateCurrent,或检查作业是否已通过调用JobManager.Instance().GetAllJobRequestsForFlag(MyJob.TAG)存在.
信用与优惠参考:
>将android-job Xamarin.Android binding和Android Manifest配置说明归功于Dooks123.
> android-job library为Evernote