Я разрабатываю приложение для веб-просмотра, это веб-приложение с оболочкой android, которое обрабатывает биллинг Google Play для подписок, и в будущем уведомления pu sh.
служба новостей, поэтому мне нужно, чтобы приложение запускало функцию каждый час, которая отправляет запрос POST на мой сервер и получает ответ, если что-то новое, если есть, то создайте уведомление, сообщающее пользователю, чтобы открыть приложение. Я уверен, что это возможно, но я хочу как можно больше проверять это приложение в будущем, я знаю, что с android ~ 8 им не нравятся люди, использующие сервисы, когда приложение больше закрыто, и что мы должны использовать Задачи или что-то в этом роде, и я понятия не имею, как это сделать, поэтому мне нужна помощь. Спасибо!
РЕДАКТИРОВАНИЕ: Я искал дополнительные учебники и создал базовую задачу c, которая работает в фоновом режиме и знает, находится ли приложение на переднем плане или нет
в MainActivity. java:
public void startAlarm() {
manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
int interval = 2000;
manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
}
public void cancelAlarm() {
if (manager != null) {
manager.cancel(pendingIntent);
Toast.makeText(this, "Alarm Canceled", Toast.LENGTH_SHORT).show();
}
}
в MainActivity. java внутри onCreate ():
startAlarm();
в NotificationReceiver. java:
import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.widget.Toast;
import java.util.List;
import static android.app.NotificationChannel.DEFAULT_CHANNEL_ID;
public class NotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
// For our recurring task, we'll just display a message
if (isAppForground(arg0)) {
Toast.makeText(arg0, "I'm running in foreground", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(arg0, "I'm running in background", Toast.LENGTH_SHORT).show();
}
}
public boolean isAppForground(Context mContext) {
ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!((List) tasks).isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(mContext.getPackageName())) {
return false;
}
}
return true;
}
}
В AndroidManifest. xml:
<uses-permission android:name="android.permission.GET_TASKS" />
Сейчас я пытаюсь научиться использовать уведомления, но документация Android довольно дерьмовая, поэтому любая помощь очень ценится.