Android:仅当我立即启动 App 时,Boot Complete 才有效

标签 android broadcastreceiver startup

我正在尝试在我的应用程序中重置警报并使用接收器来获取 onBootCompleted。为了查看是否收到了 Intent ,我正在使用 toast 。仅当我立即打开应用程序时才会出现 toast 。否则, toast 不会出现。我查看了以前的问题,但几乎所有问题都涉及我没有使用的服务。我不确定这是否是问题的一部分。

Android list

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="internalOnly"
package="package.name" >

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:configChanges="orientation|screenSize|keyboardHidden"
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTop" >
        <meta-data android:name="android.app.searchable"
            android:resource="@xml/searchable" />

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
</activity>
    <receiver android:name=".AlarmReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.ALARM_SERVICE" />
        </intent-filter>
    </receiver>
    <receiver android:name=".AlarmReset"android:enabled="true" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

</application>

接收类

public class AlarmReset extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent)
{

    Toast.makeText(context, "Hello! Got message",
            Toast.LENGTH_LONG).show();
//reset alarms etc. No service set.
}

我还尝试将 list 接收器编写为

<receiver android:name=".AlarmReset" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

我在网上找到的要点是包括权限(我这样做了)和注意日志记录。

我不明白的是为什么如果我立即(在几秒钟内,否则 toast 不会出现)开始我的 Activity 但它会成功,否则会失败。我正在考虑测试一些可能性,比如通过代码启动 Activity 本身,或者像大多数其他人一样使用服务。我目前正在实际手机上测试 Android 4.4。

最佳答案

安装应用程序后,它处于停止状态。它的任何组件都不会被激活(例如您的 BOOT_COMPLETED 接收器),直到应用程序被用户启动移出此状态。这就是为什么您的应用只有启动一次才能运行。

请注意,从“设置”中强制停止应用程序也会使其进入此停止状态。

参见 this page有关更多详细信息(在页面中搜索“启动控件”)。

关于Android:仅当我立即启动 App 时,Boot Complete 才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259002/

相关文章:

java - 更新Android Studio 3.2后,布局文件夹未显示layouts.xml文件

android - 当我的应用程序处于后台时在 Android 上捕获硬件按钮

Android:为什么我没有收到 BOOT_COMPLETED Intent ?

Mingw 上的 mainCRTStartup 之前的 C 函数?

hadoop - Hadoop CDH3错误。无法启动Hadoop DataNode守护程序

android - 如何在jetcompose中制作自定义形状

java - 带提示的多选微调器

android - 将 Android SDK 从修订版 12 更新到修订版 13 后出现 "unknown option: --output"

android - 从堆栈中清除后台 Activity 的正确方法是什么?

java - 在 Tomcat 服务器上自动启动 Spring Boot 应用程序