我正在开发一个用 java 构建的用于数据分析的 android 应用程序。 我们应用程序的功能需要我们的应用程序在每次设备启动时重新启动。 所以我了解了广播和广播接收器。 我已经实现了一个广播接收器,如下所示:
public class BootReceiver extends BroadcastReceiver {
String TAG = "BootReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d(TAG, "onReceive: Boot receiver received.");
String packageName = context.getPackageName();
Log.d(TAG, "onReceive: Package name is: "+ packageName);
Intent serviceIntent = new Intent(context, ForegroundService.class);
context.startForegroundService(serviceIntent);
}
}
}
我还在 androidmanifest.xml 中添加了权限和接收者,如下所示:
<uses-permission android:name="android.intent.action.BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application>...
<receiver
android:name=".BootReceiver"
android:enabled="true"
android:exported="true"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
所以我尝试在 Android TV 模拟器设备版本 11 和 10 上运行这个应用程序。当模拟器重新启动时,应用程序按预期重新启动。但问题是,当我尝试使用真实/物理 android 移动设备版本 11 的相同 apk 时,它没有重新启动,并且可以看到我已经在我的 BootReceiver 广播接收器中添加了一些用于调试的日志。如果是我的安卓移动设备,这些alsa在android studio的logcat中是看不到的。
所以我有点困惑是模拟器和真实设备有什么区别还是我完全在错误的方向上搜索?
任何帮助将不胜感激!
提前致谢!