【发布时间】:2022-01-21 03:10:37
【问题描述】:
以前有很多这样的问题,我已经尝试实现答案,但它在 Android 11 上不起作用。我希望我的 Flutter 应用程序在启动完成后自动启动/打开。
这是我的接收者MainActivityReceiver.kt
package com.mypackage
import android.content.BroadcastReceiver
import android.content.Context;
import android.content.Intent;
class MainActivityReceiver: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
val i = Intent(context, MainActivity::class.java)
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(i)
}
}
}
我在AndroidManifest.xml上添加了一些代码
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<receiver
android:enabled="true"
android:exported="true"
android:name="com.myPackage.MainActivityReceiver"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
编辑
我找到了https://stackoverflow.com/a/63250729/11445944,但是如何在flutter上实现呢?
如何在flutter上添加这段代码MainActivity.kt
if (!Settings.canDrawOverlays(getApplicationContext())) {
Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
Uri uri = Uri.fromParts("package", getPackageName(), null);
myIntent.setData(uri);
startActivityForResult(myIntent, REQUEST_OVERLAY_PERMISSIONS);
return;
}
我已将它添加到我的 MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!Settings.canDrawOverlays(getApplicationContext())) {
val myIntent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
val uri: Uri = Uri.fromParts("package", getPackageName(), null)
myIntent.setData(uri)
startActivityForResult(myIntent, REQUEST_OVERLAY_PERMISSIONS)
return
}
}
我在构建时遇到错误
[ +2 ms] e: project_path/app/MainActivity.kt: (32, 5): 'onCreate' overrides nothing
[ +24 ms] e: project_path/app/src/main/kotlin/package/MainActivity.kt: (32, 47): Unresolved reference: Bundle
[ +7 ms] e: project_path/app/src/main/kotlin/package/MainActivity.kt: (34, 14): Unresolved reference: Settings
[ +3 ms] e: project_path/app/src/main/kotlin/package/MainActivity.kt: (35, 35): Unresolved reference: Settings
[ +3 ms] e: project_path/app/src/main/kotlin/MainActivity.kt: (38, 46): Unresolved reference:
REQUEST_OVERLAY_PERMISSIONS
已解决
导入两行代码后错误消失了
import android.os.Bundle
import android.provider.Settings
别忘了初始化var REQUEST_OVERLAY_PERMISSIONS = 100。现在我的应用在 Android 11 上启动完成后会自动运行。
【问题讨论】: