Saltar al contenido

¿Cómo crear un servicio en Flutter para hacer que una aplicación se ejecute siempre en segundo plano?

Te damos la respuesta a esta preocupación, al menos eso deseamos. Si tienes dudas dínoslo, que para nosotros será un placer ayudarte

Solución:

No hay forma de hacer esto directamente desde flutter. ahora aunque eso puede cambiar en algún momento, consulte esta solicitud de error / función. Sin embargo, tienes un par de opciones.

La primera es usar MethodChannels y simplemente escribir el código de Android que desea crear un servicio en segundo plano (o si desea que siempre sea un servicio en segundo plano, probablemente pueda hacerlo sin necesidad de comunicación desde el lado aleteo).

El segundo es una combinación de estos dos complementos: android_alarm_manager y android_intent. Pero eso no ayudará en todos los casos de uso.

EDITAR Febrero de 2021:

Flutter ahora admite la ejecución de procesos en segundo plano. Consulte esta página para obtener más detalles.

  • crear un nuevo proyecto Flutter.
    • crear BroadcastReceiver clase al lado MainActivity en el directorio de Android
    • cambio MainActivity.java y main.dart y AndroidManifest.xml como esto

MyReceiver

    package com.example.flutter_broadcastreceiver_alarmmanager_repeat;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    public class MyReceiver extends BroadcastReceiver 
        @Override
        public void onReceive(Context context, Intent intent) 
            MainActivity.callFlutter();
        
    

Actividad principal

package com.example.flutter_broadcastreceiver_alarmmanager_repeat;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.view.FlutterView;

public class MainActivity extends FlutterActivity 

    private PendingIntent pendingIntent;
    private AlarmManager alarmManager;
    private static  FlutterView flutterView;
    private static final String CHANNEL = "com.tarazgroup";

    @Override
    protected void onCreate(Bundle savedInstanceState) 

        super.onCreate(savedInstanceState);
        flutterView=getFlutterView();
        GeneratedPluginRegistrant.registerWith(this);

        Intent intent = new Intent(this, MyReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(this, 1019662, intent, 0);
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000, pendingIntent);

    

    @Override
    protected void onDestroy() 
        super.onDestroy();
        alarmManager.cancel(pendingIntent);
    

    static void callFlutter()
        MethodChannel methodChannel=new MethodChannel(flutterView, CHANNEL);
        methodChannel.invokeMethod("I say hello every minute!!","");
    

main.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  


class MyHomePage extends StatefulWidget 
  MyHomePage(Key key) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();


class _MyHomePageState extends State 

  static const methodChannel = const MethodChannel('com.tarazgroup');

  _MyHomePageState() 
    methodChannel.setMethodCallHandler((call) 
      print(call.method);
    );
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
      ),
      body: Container() 
    );
  

AndroidManifest.xml




    
        

            

            
                

                
            
        

        

    


su código de aleteo llama a cada 1 min. incluso su aplicación minimizada o cambie a otra aplicación o apague la pantalla.

Esta es una biblioteca para hacer precisamente eso background_fetch.

Background Fetch es un complemento muy simple que activará una aplicación en segundo plano aproximadamente cada 15 minutos, proporcionando un breve período de tiempo de ejecución en segundo plano. Este complemento ejecutará su callbackFn provisto cada vez que ocurra un evento de búsqueda en segundo plano. árbitro

Si te gusta la informática, eres capaz de dejar una noticia acerca de qué te ha gustado de este post.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *