How to make app to run always in background in Flutter?
Sometimes a user may require to run the application always in the background So this time we will go through How to make an app to run always in the background in Flutter.
Are you ready for the same?
How to make the app run always in the background in Flutter?
There isn’t a way to do this directly from flutter right now although that may change at some point – see this bug/feature request. You do have a couple of options though.
The first is to use MethodChannels and simply write the android code you want to create a background service (or if you want it to always be a background service you can probably do that without needing communication from the flutter side).
The second is some combination of these two plugins – android_alarm_manager and android_intent. But that won’t help for all use-cases.
Create a New Flutter project.
- Create BroadcastReceiver class beside MainActivity in android dir.
- Change MainActivity.java and main.dart and AndroidManifest.xml like this
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(); } }
MainActivity will look like below:
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 will look like below:
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<MyHomePage> { 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 will have a code snippet like the below:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.flutter_broadcastreceiver_alarmmanager_repeat"> <application android:name="io.flutter.app.FlutterApplication" android:icon="@mipmap/ic_launcher" android:label="flutter_broadcastreceiver_alarmmanager_repeat"> <activity android:name=".MainActivity" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:windowSoftInputMode="adjustResize"> <meta-data android:name="io.flutter.app.android.SplashScreenUntilFirstFrame" android:value="true" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyReceiver"></receiver> </application> </manifest>
Conclusion:
Ensuring your app runs efficiently in the background is crucial for a seamless user experience. At Flutter Agency, we pride ourselves on being one of the best mobile app development agencies, providing expert solutions and support. Partner with us to elevate your app development projects to new heights.
Thanks for Reading !!!
So in this article, we have been through How to make an app run always in the background in Flutter.
Keep Learning !!! Keep Fluttering !!!
Still, need Support for Flutter Development? Do let us know.
Flutter Agency is our portal Platform dedicated to Flutter Technology and Flutter Developers. The portal is full of cool resources from Flutter like Flutter Widget Guide, Flutter Projects, Code libs and etc.
Flutter Agency is one of the most popular online portals dedicated to Flutter Technology and daily thousands of unique visitors come to this portal to enhance their knowledge of Flutter.
Contemporary ventures
Recent blog
ready to get started?
Fill out the form below and we will be in touch soon!
"*" indicates required fields