有很多使用 Boot _COMPLETED在设备引导时启动应用程序的例子。我尝试在我的Flutter应用程序中使用这些示例。让它启动应用程序。这是一个简单的标牌应用程序,显示图像。基本上类似于相框。
在下面的示例代码中,应用程序正在编译,但是,例如,当我重新启动模拟器时,代码似乎没有任何效果。
我的猜测是,我没有调用正确的代码来实际启动应用程序。我不是一个Android开发者,所以我有问题,弄清楚到底是怎么回事。清单如下。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="au.net.digitall.cmplayer">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:name="io.flutter.app.FlutterApplication"
android:label="cm_player"
android:icon="@mipmap/ic_launcher"
tools:ignore="GoogleAppIndexingWarning">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/cmTheme2"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
android:hardwareAccelerated="true"
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:enabled="true"
android:name=".StartCmPlayerServiceAtBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
然后使用StartCmPlayerServiceAtBootReceiver类启动APP。
package au.net.digitall.cmplayer;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class StartCmPlayerServiceAtBootReceiver extends BroadcastReceiver {
private static final String TAG = StartCmPlayerServiceAtBootReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "BOOT detected");
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent serviceIntent = new Intent(context, MainActivity.class);
context.startService(serviceIntent);
}
}
}
这一切都编译和运行,但在重新启动时什么也没发生。感谢帮助。
3条答案
按热度按时间laik7k3q1#
非常感谢Mike M。他的建议和指出其他基于Android的讨论给了我足够的信息来存档autostart Boot 时。对上面示例的代码更改如下。
在StartCmPlayerServiceAtBootReceiver类中,更改为
再次感谢,我希望其他flutter开发人员发现这是有用的。
omhiaaxx2#
1.在kotlin路径
project_name/android/app/src/main/kotlin/com/example/app/
上创建接收器类1.在清单上添加权限
1.在清单上的应用程序标签内添加接收器标签
1.添加代码以在
MainActivity.kt
上完成启动后打开应用程序,您可以在project_name/android/app/src/main/kotlin/com/example/app/
上找到它不要忘记在
MainActivity.kt
上导入下面的代码,因为你需要Bundle
和Settings
包在我的flutter应用程序上工作,在android11上测试。
pexxcrt23#
@Miftakhul Arzak你的答案工程完美的Android即使在中国OEM的像OPPO和Vivo甚至在Android 13。谢谢你,这是一个生命拯救者。
如果有人正在研究java,并且想用java完成上面的代码::
AndroidManifest.xml::-
MainActivity.java :-
Broadcast Receiver::-
你唯一需要的是自动发射许可。