Как лучше всего запускать апплеты в фоновом режиме - Android - PullRequest
0 голосов
/ 19 июня 2020

Я разрабатываю приложение, которое отправляет данные о местоположении в базу данных. Поскольку мне нужно, чтобы эта задача выполнялась в фоновом режиме, я использовал тип Service для отправки данных, но когда приложение переходит в фоновый режим, служба перестает выполняться через несколько секунд. Я исследовал эту тему и нашел класс JobScheduler, но этот класс выполняет службы в фоновом режиме с очень длительным интервалом времени (15 минут), и мне нужно, чтобы служба выполнялась не реже, чем каждые 2 минуты и отменялась только пользователем. Есть ли способ сделать это? Благодарю всех, кто может помочь.

https://developer.android.com/reference/android/app/job/JobScheduler

Моя служба:

public class GPSservice extends Service {

private String TAG = "INICIAR SERVIÇO GPS";
private Context context;

private HandlerThread handlerThread;
private Handler handler;

private final int TEMPO_ENTRE_NOTIFICAÇOES_SEGUNDOS = 60; //tempo de sessenta segundos

@Override
public void onCreate() {

    handlerThread = new HandlerThread("HandlerThread");

}

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    Log.e(TAG, "onStartCommand");

    //Previne que seja executado em subsequentes chamadas a onStartCommand
    if(!handlerThread.isAlive()) {
        Log.d("NotifyService","Notificações iniciadas");
        handlerThread.start();
        handler = new Handler(handlerThread.getLooper());

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                AtualizarLocalizacaoBanco();
                handler.postDelayed(this, 1000 * TEMPO_ENTRE_NOTIFICAÇOES_SEGUNDOS);
            }
        };
        handler.post(runnable);
    }

    return Service.START_NOT_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d("NotifyService","Notificações Finalizadas");
    Intent broadcastIntent = new Intent(this, BroadCastReceiver.class);
    sendBroadcast(broadcastIntent);

    //handlerThread.quit();

}

@Override
public void onTaskRemoved(Intent rootIntent) {
    super.onTaskRemoved(rootIntent);
}

public void AtualizarLocalizacaoBanco(){

    context = this;

    ModeloAtualizacao model = new ModeloAtualizacao();

    SharedPreferences preferences = this.context.getSharedPreferences("user_preferences", MODE_PRIVATE);

    model.setId(preferences.getString("usuario_id", ""));
    model.setLati(preferences.getString("user_latitude", ""));
    model.setLongi(preferences.getString("user_longitude", ""));
    model.setEmpresa(preferences.getString("usuario_empresa", ""));
    model.setEscola(preferences.getString("usuario_escola", ""));

    Call<String> call = new RetrofitConfig().postAtualizacao().atualizarLocalizacao(model);

    call.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {

            Log.d("Sucesso: ", "ok");

        }

        @Override
        public void onFailure(Call<String> call, Throwable t) {

            Log.d("Erro atualizar", t.getMessage());

        }
    });

}

Манифест:

    <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true">
    <activity android:name=".ActivityGPS"></activity>
    <activity android:name=".Activity_Lista_Aluno" />
    <activity
        android:name=".ProfessorActivity"
        android:label="@string/title_activity_professor" />

    <service
        android:name=".GPSservice"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:exported="false"/>

    <activity
        android:name=".MainActivity"
        android:theme="@style/AppTheme.NoActionBar" />
    <activity android:name=".Activity_Login">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...