我有一个应用程序, Boot 后启动一个Intent,从Android 6到Android 9 API级别28。
但此代码无法在Android 10 API级别29上运行,Broadcast不会接收任何事件,也不会在 Boot 后在MyClassBroadcastReceiver上运行onReceive。Android 10上是否有任何额外的权限或需要进行的配置?
干燥部分示例:清单:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.softniels.autostartonboot">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="com.softniels.autostartonboot.ForegroundService"
android:label="My Service">
<intent-filter>
<action android:name="com.softniels.autostartonboot.ForegroundService" />
</intent-filter>
</service>
<receiver
android:name=".StartMyServiceAtBootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
</application>
这里的部分不运行在Android 10.
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.i("onReceive", "call onReceive ACTION_BOOT_COMPLETED");
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
}
4条答案
按热度按时间ozxc1zmp1#
我知道这可能是旧的,但我已经面临同样的问题,并根据这:https://developer.android.com/guide/components/activities/background-starts
我想到的最简单的解决方案就是
设置接收器:
到货单上。
接收方代码:
这两个选项都有效。我看到的唯一缺点是应用程序加载需要相当长的时间(从我的测试中可以长达10秒)
如果其他人也遇到此问题,请将其保留在此处。这仅适用于android 10及以上版本。需要请求“在其他应用程序上显示”权限
这需要图形覆盖,可通过以下方式完成:
mhd8tkvw2#
我想我找到了一个“解决方案”。
gwo2fgha3#
context.startActivity()
没有启动,我用以下方法解决了这个问题:1szpjjfi4#
我用清单中的这个权限解决了它:
而在主要活动中:
设置的正确导入为:android.provider
应用程序第一次启动时,将提示权限控制哪些应用程序可以在其他应用程序之上绘制,下一个设备将启动应用程序,并使用典型的广播接收器启动。
这是医生