BootReceiver不起作用

时间:2015-08-03 15:16:41

标签: android broadcastreceiver boot

我知道这已被问过很多次了,互联网上有数百个例子,但我想了解我的代码中有什么问题。 由于标题建议我想在手机打开时执行一些代码,特别是我想设置一些警报来获取通知,但现在不相关,我的问题是启动接收器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>

我已经创建了接收器类

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::我忘了说我需要停止调试警报的代码,但我不认为这是问题,因为它甚至没有显示Toast。 更新:完整清单

<?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>

1 个答案:

答案 0 :(得分:1)

  

我应该在接收器之前运行活动吗?

在任何清单注册的接收器工作之前,必须使用显式Intent来启动应用程序的某个组件。对于99%的Android应用程序,这意味着用户必须从主屏幕启动您的应用程序。如果您的应用程序作为其他应用程序的插件,您可能不需要该活动 - 请与将托管您的插件的应用程序的开发人员讨论。

  

如果用户未打开活动,如何设置通知?

如果用户未打开活动,则不会设置通知。您的应用只会在用户允许您运行时运行。如果用户选择不启动您的应用程序,或者用户选择从“设置”中“强制停止”您的应用程序,则您的清单注册的接收者将不会收到广播。