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 ladoMainActivity
en el directorio de Android - cambio
MainActivity.java
ymain.dart
yAndroidManifest.xml
como esto
- crear
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.