Celeste Capece
Celeste Capece

Reputation: 1533

BootReceiver doesen't work

I know this has been asked tons of times, and there are hundreds of example on internet, but i want to understand what's wrong in my code. As the title suggest i want to execute some code while the phone turn on, specifically i want to set some Alarms for getting notifications, but that's not relevant now, my problem is that the boot receiver onReceive method is never called apparently

I have the right permissions in the manifest:

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

And i've also registered the receiver in the manifest

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

And I've already created the 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
}

}

Can someone explain me what i'm a failing without posting always the same examples that i see everywhere? I want to know what's wrong in my code, not how it should be done.

PS: : I forgot to say that i need to stop the code for debugging the alarm things, but i don't think that's the problem since it doesen't even show the Toast. UPDATE: full manifest

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

Upvotes: 0

Views: 306

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006674

I should run the activity before the receiver?

Something has to use an explicit Intent to start one of your application's components before any manifest-registered receivers will work. For 99% of Android apps, that means that the user has to start your app from the home screen. If your app is serving as a plugin to some other app, you may not need the activity — please discuss this with the developers of the app that would be hosting your plugin.

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

You wouldn't set the notification if the user does not open the activity. Your app will only run when the user lets you run. If the user chooses not to start your app, or if the user chooses to "Force Stop" your app from within Settings, your manifest-registered receiver will not receive broadcasts.

Upvotes: 1

Related Questions