BootReceiver 不工作

BootReceiver doesen't work

我知道这个问题已被问过很多次,互联网上有数百个示例,但我想了解我的代码中有什么问题。 正如标题所示,我想在 phone 打开时执行一些代码,特别是我想设置一些警报以获取通知,但现在不相关,我的问题是启动接收器 onReceive 方法显然从未被调用

我在清单中拥有正确的权限:

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

而且我还在清单中注册了接收器

<receiver
  android:name=".BootBroadcastReceiver"
  android:enabled="true" >
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
  </intent-filter>
</receiver>

并且我已经创建了接收器 class

public class BootBroadcastReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context pContext, Intent intent) {
    Toast.makeText(pContext,"waiting for debugger",Toast.LENGTH_LONG).show();
    android.os.Debug.waitForDebugger();
    //Stuff for the alarms
}

}

有人可以向我解释我的失败之处,而不必总是张贴我随处可见的相同示例吗? 我想知道我的代码有什么问题,而不是应该如何完成。

PS: :我忘了说我需要停止调试警报的代码,但我认为这不是问题,因为它甚至不显示吐司。 更新: 完整清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="feddycapdev.conapo.turnario" >
    <uses-permission android:name="android.permission.INTERNET"/>
    <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:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Calendario"
            android:label="@string/title_activity_calendario"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".Settings_Activity"
            android:label="@string/title_activity_settings_" >
        </activity>
        <activity
            android:name=".SettingGiorno"
            android:label="@string/title_activity_setting_giorno" >
        </activity>
        <receiver
            android:name=".BootBroadcastReceiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <service android:enabled="true" android:name=".WebNotificChecker" />
        <service android:enabled="true" android:name=".Sveglia" />
        <service android:enabled="true" android:name=".NotificaVigilanza" />
    </application>
</manifest>

I should run the activity before the receiver?

必须使用明确的 Intent 来启动您的应用程序的组件之一,然后清单注册的接收器才能工作。对于 99% 的 Android 应用,这意味着用户必须从主屏幕启动您的应用。如果您的应用程序作为其他应用程序的插件,您可能不需要 activity — 请与将托管您的插件的应用程序的开发人员讨论这个问题。

how can I set notification if the user doesn't open activity?

如果用户不打开 activity,则不会设置通知。只有当用户允许您 运行 时,您的应用才会 运行 。如果用户选择不启动您的应用程序,或者如果用户选择从“设置”中 "Force Stop" 您的应用程序,您的清单注册接收器将不会接收广播。