Broadcastreceiver и приостановленная деятельность - PullRequest
16 голосов
/ 25 октября 2011

У меня есть радиопередатчик, зарегистрированный в программе.Он отвечает на намерение PACKAGE_REMOVED, которое срабатывает при удалении пакета.

Проблема в том, что оно не получает это сообщение.Я думаю, это связано с тем, что намерение срабатывает, когда я покидаю действие и перехожу к другому действию, чтобы удалить приложение, поэтому исходное действие приостанавливается.Может ли быть так, что приостановленное действие (где получатель не зарегистрирован в onPause) также приостанавливает приемник?

Ответы [ 3 ]

36 голосов
/ 10 ноября 2011

Когда вы запрограммируете приемника вещания в мероприятии, он НЕ будет получать вещания, когда задание приостановлено.BroadcastReceiver docs не так ясен, как мог бы быть по этому вопросу.Они рекомендуют отменять регистрацию в onPause исключительно для снижения нагрузки на систему.

Если вы хотите получать события, даже если ваша деятельность не находится на переднем плане, зарегистрируйте получателя в манифесте, используя элемент receive .

5 голосов
/ 12 ноября 2011

Добавьте Receiver в свой проект, и вы получите это событие, даже не запуская ваше приложение.

public class TestReciver extends BroadcastReceiver  {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("TestReciver",intent.getAction()+"\n"
                +intent.getDataString()+"\n"
                +"UID: "+intent.getIntExtra(Intent.EXTRA_UID,0)+"\n"
                +"DATA_REMOVED: "+intent.getBooleanExtra(Intent.EXTRA_DATA_REMOVED, false)+"\n"
                +"REPLACING: "+intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)
            );
    }

}

и в своем манифесте добавьте его следующим образом (Внутри вашего tag):

<receiver android:name="TestReciver" >
    <intent-filter >
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <data android:scheme="package" />
    </intent-filter>
</receiver>

Когда вы используете такой приемник, вы не вызываете ни один регистр или отменяете регистрацию, поэтому он всегда будет готов к получению данных.

Примечание: это неработать, если вы позволите пользователям перенести ваше приложение на SD-карту.Если событие отправлено, когда SD-карта отключена, приемник не будет доступен, и вы пропустите событие.

2 голосов
/ 11 ноября 2011

Может быть, вы можете зарегистрировать приемник в службе, которая будет работать в фоновом режиме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...