Подтвердить что ты не робот

Broadcastreceiver и приостановленная деятельность

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Добавьте 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)
            );
    }

}

и в вашем манифесте добавьте его так (внутри вашего тега <application> ):

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

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

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

Ответ 3

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