Я реализовал широковещательный приемник:BroadcastReceiver не работает
public class ServiceManager extends BroadcastReceiver {
private final String BOOT_ACTION = "android.intent.action.BOOT_COMPLETED";
private final String BOOT_ACTION_FIRST_LAUNCH = "android.intent.action.PACKAGE_FIRST_LAUNCH";
private final String BOOT_ACTION_RESTARTED = "android.intent.action.PACKAGE_RESTARTED";
@Override
public void onReceive(Context context, Intent intent) {
// All registered broadcasts are received by this
String action = intent.getAction();
if (action.equalsIgnoreCase(BOOT_ACTION) || action.equalsIgnoreCase(BOOT_ACTION_FIRST_LAUNCH) ||
action.equalsIgnoreCase(BOOT_ACTION_RESTARTED)) {
// TODO: Action
}
}
}
AndroidManifest.xml
<receiver android:name="package.service.ServiceManager" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.PACKAGE_FIRST_LAUNCH" />
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
</intent-filter>
</receiver>
Действие BOOT_COMPLETED работает правильно, но, в PACKAGE_FIRST_LAUNCH и PACKAGE_RESTARTED не работают. Мне нужно запустить свой широковещательный приемник при запуске приложения, поэтому я использую эти действия. Но когда я запускаю или перезапускаю приложение, приемник не работает. Он работает только при перезагрузке моего мобильного телефона. Что-то не так в моем источнике?
Как правило: использование строковых констант - это хорошо. В случае строк действия намерения, вы не должны делать это самостоятельно, хотя. Все эти строки имеют свою собственную константу в рамках андроида, большинство из них принадлежат классу Intent. Например. см. ['Intent.ACTION_BOOT_COMPLETED'] (http://developer.android.com/reference/android/content/Intent.html#ACTION_BOOT_COMPLETED). Скорее используйте их, избегая путаницы из-за случайной опечатки при определении их самостоятельно. ;) –