BroadcastReceiver не работает - PullRequest
       0

BroadcastReceiver не работает

3 голосов
/ 13 марта 2012

Я реализовал этот приемник:

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 не работают. Мне нужно запустить приемник вещания при запуске приложения, поэтому я использую эти действия. Но когда я запускаю или перезапускаю приложение, приемник не работает. Это работает только при перезагрузке моего мобильного телефона. Что-то не так в моем источнике?

Ответы [ 4 ]

6 голосов
/ 13 марта 2012

К вашему сведению: PACKAGE_FIRST_LAUNCH - это только , отправленное в пакет установщика, т. Е. Все, что вы использовали для установки приложения - для большинства конечных пользователей, которые будут Android Market.

Edit:
О, и для "PACKAGE_RESTARTED" разбейте его на свои <intent-filter> и добавьте

<data android:scheme="package"/>

, поскольку он поставляется с URI и явной схемой.

3 голосов
/ 13 марта 2012

Логически кажется, что PACKAGE_FIRST_LAUNCH будет транслироваться после первого запуска вашего приложения после загрузки / перезагрузки.И PACKAGE_RESTARTED следует транслировать, если ваш стек активности приложения удален, а затем щелкнуло ваше приложение, чтобы запустить его снова (например, перезапустить).

Однако вы можете просто добиться этого, передавая строку пользовательского действия, когдаприложение запущено (возможно, из вашей первой активности).

0 голосов
/ 22 октября 2012

Намерение android.intent.action.PACKAGE_FIRST_LAUNCH введено в Android API Level 12. Если вы используете меньший уровень API, оно не будет работать. Поэтому измените настройки вашего проекта соответственно.

0 голосов
/ 13 марта 2012

Манифест:

...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></>
...
<receiver android:name=".AutoStart">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>
...

Приемник:

package YourPackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AutoStart extends BroadcastReceiver
{   
    @Override
    public void onReceive(Context context, Intent intent)
    {   
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
        {
            // Your code
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...