如何在Flutter中实现Android应用程序的开机自启动?

9

我想在安卓设备 开机 后自动启动我的应用程序。

有没有相关的包或解决方案可以实现这一点? 我知道如何在原生 Android 代码中实现它,但在 Flutter 中该怎么做呢?


1
您可以点击此链接:https://dev59.com/YGw15IYBdhLWcg3wzO1_#6392009 - Salih Can
如何在Flutter中实现这一点? - appdev
实际上,您可以完全按照答案中的方式进行操作。您只需要将“com.myapp.MyService”更改为您自己的即可。最后,您应该将名称“MyService.class”更新为“MyActivity.class”。 - Salih Can
"onReceive" 隐藏了超类型 "BroadcastReceiver" 的成员,需要使用 "override" 修饰符。出现了这个错误。 - appdev
如果您已经添加了@ Override注释,则应在onReceive方法的顶部添加它,如果您已经添加了它,可以在您的帖子中添加更多代码。 - Salih Can
显示剩余2条评论
2个回答

5
在您的android/src/main/java/<package-name>/..文件夹中创建一个新的Java类(与MainActivity.java文件位于同一文件夹中)。
可以随意命名,例如BootBroadcastReceiver.java。
package <your package name here>;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class BootBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Intent i = new Intent(context, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
}

将此 Android 权限添加到您的AndroidManifest.xml 中。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

将以下代码添加到你的 AndroidManifest.xml 文件中 <application ... /> 对象的底部。
<receiver android:name=".BootBroadcastReceiver" >   
    <intent-filter>   
        <action android:name="android.intent.action.BOOT_COMPLETED" />  
        <action android:name="android.intent.action.QUICKBOOT_POWERON" /> 
    </intent-filter>   
</receiver> 
<代码><receiver .. />的名称应与类名匹配。只需复制上面的内容。
我发现某些设备,如小米,有一个安全功能来防止“自启动”。这可以在安全应用程序中为应用程序启用/禁用,或者在设置中搜索“自启动”,您将进入正确的部分。
我认为此应用程序需要至少打开一次才能正常工作。

如果我想要启动套接字,这段代码是如何工作的? - Rian Pratama
如果我想要启动套接字,这段代码是如何工作的? - undefined
我不确定你的意思。你应该能够在BootBroadcastReceiver中看到,在onReceive方法内部它启动了一个新的Intent。在这种情况下,它启动了MainActivity.class,这将在后台开始运行应用程序。总之,当设备启动(开机)并完成了需要做的初始化工作后,它会向所有的BootBroadcastReceivers发送一条消息,告知设备已经完成开机。 - Chris
我不确定你的意思。你应该能够在BootBroadcastReceiver中看到,在onReceive方法里它启动了一个新的Intent。在这种情况下,它启动了MainActivity.class,这将在后台开始运行应用程序。总之,当设备启动(开机)并且完成了它需要做的初始化工作后,它会向所有的BootBroadcastReceiver发送一条消息,告诉它们设备已经完成了开机。 - undefined
你能帮我在后台自动启动套接字吗?我尝试了另一个前台和后台服务的包,但通知总是显示出来。 - Rian Pratama

0

谢谢,我已经尝试了。看起来三星A03不支持auto_start_flutter包。你测试的是哪款手机? - Ishmael Mavor Raines

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接