Jobintentservice在Android Oreo上方每X个小时触发一次通知

时间:2019-02-04 06:21:30

标签: android push-notification android-8.0-oreo jobintentservice

我想为我的adhan发出通知,所以我使用了Alarmmanager和JobIntentService,但没有收到通知。

这里是接收者。

 button1.Click+=(s, e) => {
    // Click event code
   };

然后是扩展JobIntentService的服务类。

    <receiver android:name="receiver.BootReceiver"
            android:enabled="true"
            android:exported="true">
        </receiver>
<service
            android:name=".services.JobService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:exported="false" />

在notifyTasker isTimerTask()中,在此检查currentTime是否等于我的祷告时间。如果是真的,那么我会触发通知。

    public class JobService extends JobIntentService {

    public static final int JOB_ID = 100;
    public static final int NOTIF_ID = 56;
    long timestamp;
    private NotificationManager mNotificationManager;
//    private final IBinder mBinder = new NotificationService.LocalBinder();

//    MediaPlayer mMediaPlayer = null;

    String MpStop;
    SharedPreferences mPreferences;
    float selectedLat, selectedLng;
    String name, userSect;
    boolean mAzanNotification;

    public static void enqueueWork(Context context, Intent work) {

        enqueueWork(context, JobService.class, JOB_ID, work);
    }
@Override
    protected void onHandleWork(@NonNull Intent intent) {
        mPreferences = Application.getAppContext().getSharedPreferences(Utils.PREF_NAME, Context.MODE_PRIVATE);

        mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notifyTasker.run();
    }

以下是我从活动中激活的我的alarmManager。

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "CH_ID")
                    .setSmallIcon(R.mipmap.icon_beta)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(),
                            R.mipmap.icon_beta))
                    .setContentTitle(getString(R.string.app_name))
                    .setContentText(text)
                    .setContentTitle(waktu)
                    .setAutoCancel(true) //                    .setSound(uri)
                    .setContentIntent(contentIntent);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

                notificationBuilder.setDefaults(Notification.DEFAULT_VIBRATE);
                // Creating an Audio Attribute
               /* AudioAttributes audioAttributes = new AudioAttributes.Builder()
                        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                        .setUsage(AudioAttributes.USAGE_ALARM)
                        .build();*/

                // Creating Channel
                NotificationChannel notificationChannel = new NotificationChannel("CH_ID", "Testing_Audio", NotificationManager.IMPORTANCE_HIGH); //                notificationChannel.setSound(uri,audioAttributes);
                mNotificationManager.createNotificationChannel(notificationChannel);
            }
            Notification notification = notificationBuilder.build();
            notification.flags |=
                    Notification.FLAG_ONGOING_EVENT |
                            Notification.FLAG_SHOW_LIGHTS;
            notification.ledOnMS = 300;
            notification.ledOffMS = 3000;

            notification.flags |= Notification.FLAG_AUTO_CANCEL;

我尝试使用上述代码为Android oreo触发通知,但无法正常工作。是否有可能使用作业计划在特定时间触发通知。因为通知将在特定的阿赞时间触发。

1 个答案:

答案 0 :(得分:0)

最好使用工作计划程序而不是警报管理器(请参阅此链接-https://developer.android.com/reference/android/app/job/package-summary)。

“ JobScheduler保证可以完成您的工作,但是由于它在系统级别运行,因此它还可以使用多个因素来智能地安排您的后台工作以与其他应用程序中的工作一起运行。这意味着我们可以最大限度地减少诸如从无线电的使用来看,这显然是电池的胜利。从API 24开始,JobScheduler甚至考虑内存压力,这对于设备及其用户来说显然是一个总体胜利。”

安排作业的示例:

JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(new JobInfo.Builder(LOAD_ARTWORK_JOB_ID, new ComponentName(this, DownloadArtworkJobService.class))
    .setBackoffCriteria(intervalsInMilliseconds, JobInfo.BACKOFF_POLICY_LINEAR);
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.build());